Rozwiązanie bordeuxa wymaga curl. Ja niedawno robiłem pobieranie danych z serwera HTTP przez czyste fsockopen() i wyglądało to tak:
private function get_http_response($host, $uri)
{
$errno = '';
$errstr = '';
$fp = fsockopen($host, 80, $errno, $errstr, 30); // otwarcie połączenia
if (!$fp)
{
throw new APIConnectionException("$errstr ($errno)");
}
else
{
$out = "GET $uri HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "User-Agent: Dashione/Spring2 (Linux)\r\n"; // przedstawiamy się
$out .= "Accept: text/xml;q=1\r\n"; // akceptujemy tylko XML-a póki co
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out); // zapis do socketu
// pobieranie danych z socketu
$result = '';
while (!feof($fp))
{
$result .= fgets($fp, 128);
}
fclose($fp);
return $result;
}
}
Oczywiście pobieranie danych z socketu możesz (powinieneś nawet - bo co, jeśli ktoś nam podał adres kilkusetmegabajtowego pliku?) ograniczyć do kilku(set) bajtów, nie musisz używać while.
Oczywiście nagłówki User-Agent i Accept wypada zmienić (zwłaszcza Accept, zapewne do postaci /;q=1 żeby udawać że akceptujemy co tylko nam serwer poda).