Pobieranie danych przez fsockopen

0

Witam.
Od jakiego czasu próbuję uporać się z pobraniem zawartości strony cenapaliw.pl.
Zrobiłem już kilka kroków naprzód ale... utknąłem :(
Funkcja prawidłowo zwraca zawartość z np. facebook.com ale z cenapaliw.pl już nie.

A tu kod który napisałem:

function HTTPReq($url) {
$fp = fsockopen((parse_url($url,PHP_URL_SCHEME) == 'https' ? 'tcp://' : '').parse_url($url,PHP_URL_HOST), (parse_url($url,PHP_URL_SCHEME) == 'https' ? 443 : 80), $errno, $errstr, 30) or die("$errno: $errstr");
$res='';
 
$out="GET ".parse_url($url,PHP_URL_PATH).(parse_url($url,PHP_URL_QUERY) == '' ? '' : '?'.parse_url($url,PHP_URL_QUERY))." HTTPS/1.1\r\n";
$out.="Host: ".parse_url($url,PHP_URL_HOST)."\r\n";
$out.="User-Agent: Mozilla/5.0 Firefox/34.0.1\r\n";
$out.="Accept: */*\r\n";  
$out.="Accept-Language: pl;q=0.8,en-US;q=0.5,en;q=0.3\r\n";   
$out.="Connection: Close\r\n\r\n";
fwrite($fp, $out);
while(!feof($fp)) {
$res.=fgets($fp, 128);
}
fclose($fp);
 
$result = explode("\r\n\r\n",$res,2);
return $result;
}

Odpowiedź:

HTTP/1.1 400 Bad Request
Server: cloudflare-nginx
Date: Mon, 22 Dec 2014 12:13:43 GMT
Content-Type: text/html
Content-Length: 177
Connection: close
 
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>cloudflare-nginx</center>
</body>
</html>

Macie może jakieś pomysły ?

0

Nie wynajdywać koła od nowa i użyć jakiegoś cURLa bądź innej biblioteki.

BTW: pamiętaj, że nie możesz tak o, podpieprzać sobie danych od innych. Jeżeli cenapaliw.pl udzieli Ci zgody na wykorzystanie ich danych, to zapewne z chęcią udostępnią Ci też proste API do pobierania tych danych.

0

@dzek69: Mi nie chodzi o to żeby "podpieprzać" dane a chcę je aktualizować.
Np. moja strona -> własna baza -> fsockopen -> cenapaliwa.pl
Niestety ale hosting ma zablokowany cURL.
cenapaliw.pl nie ma API.

Polecisz jakąś bibliotekę ? :)
Nie działającą przez cURL...

0

To może odżałuj lepszej pizzy i sobie kup porządny hosting? Na darmówkach to i tak nie ma sensu na dłuższą metę.

Jeżeli piszesz automat, który ma pomóc cenapaliwa.pl w utrzymaniu aktualnych danych to odezwij się do nich na kontakt - dogadajcie się.

0

@dzek69: nie chodzi mi o automat tylko jak wprowadzę dane na swojej stronie to żeby zapisały się na w bazie danych i za pomocą fsockopen przesłać dane dalej na cenapaliw.pl

0

To też jest automat :p Automatycznie przesyła dane dalej, nie musisz tego robić ręcznie.

0

Ok zgoda automat :)

0

jeśli chcesz tylko czytać, zrób to tak :)

file_get_contents('http://cenapaliwa.pl/');
0

@lhp:
1.

file_get_contents

nic nie zwraca :)
2. Chcę też aktualizować dane :)

0

Aby file_get_contents działało i pobierało dane z adresu url musisz mieć włączone allow_url_fopen w php.ini na Twoim serwerze. Jeśli męczysz się na darmowym serwerze, to raczej na pewno masz tę opcję zablokowaną.

[Mirek]

0

Po dwóch miesiącach comeback i...

  1. @kchteam: funkcja
file_get_contents

mi działa prawidłowo :)

dzek69 napisał(a):

To może odżałuj lepszej pizzy i sobie kup porządny hosting?

@dzek69: Odżałowałem... Kupiłem porządny hosting... i... problem ten sam xD

  1. Problemem nie był jednak serwer czy funkcją fsockopen / file_get_contents a... brak parametru Accept-Encoding: ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1