Правильные заголовки для fsockopen, разбираюсь как работают парсеры

A
На сайте с 03.10.2009
Offline
6
1617

Вообщем хочу написать парсер используя функцию fsockopen(). Пишу такой код.


<?php
$proxyhost = "www.ageent.ru";
$proxyport = 80;

$http_request = "GET /moi-rasshirenija-joomla.html HTTP/1.1" . "\r\n";
$http_request .= "Host: www.ageent.ru" . "\r\n";
$http_request .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3";
$http_request .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" . "\r\n";
$http_request .= "Accept-Language: ru,en-us;q=0.7,en;q=0.3" . "\r\n";
$http_request .= "Accept-Encoding: gzip,deflate" . "\r\n";
$http_request .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7" . "\r\n";
$http_request .= "Connection: Close\r\n\r\n";

$fp = fsockopen($proxyhost, $proxyport);

if ($fp) {
// передаем запрос
fwrite($fp,$http_request);
// читаем ответ
while (!feof($fp)) {
$http_response = fgets($fp, 1024);
if (preg_match("/^HTTP\/1\.\d (\d+) (.*)/", $http_response, $found)) {
$response_code = $found[1];
$response_text = $found[2];
break;
}
}
print_r($http_response);
}
else {
echo "2";
}

if ($response_code = 200) {
echo "1";
}
?>

В ответ мне приходит что соединении удалось и все!. Вопрос, а как тело документа получить-то?

K
На сайте с 12.07.2006
Offline
295
Kpd
#1

ageent, поставьте FireFox с плагином LiveHttp, посмотрите как выглядят настоящие загловки к этому сайту и повторите всё в скрипте.

"Host: http://www.ageent.ru"

http здесь не нужен.

Kpd добавил 03.10.2009 в 10:02

Часть заголовков посылать необязательно, я обычно делаю так

$out .= "GET http://site.ru/page/ HTTP/1.1\r\n";
$out .= "Host: site.ru\r\n";
$out .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-icq, application/x-shockwave-flash, */*\r\n";
$out .= "Accept-Language: ru\r\n";
$out .= "User-Agent: Mozilla/5.0\r\n";
$out .= "Connection: Close\r\n\r\n";
A
На сайте с 03.10.2009
Offline
6
#2

хрень, не хочет работать.


<?php
$proxyhost = "www.ageent.ru";
$proxyport = 80;

$out .= "GET /moi-rasshirenija-joomla/284-plagin-dlja-translita-russkij-bukv.html HTTP/1.1\r\n";
$out .= "Host: www.ageent.ru\r\n";
$out .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-icq, application/x-shockwave-flash, */*\r\n";
$out .= "Accept-Language: ru\r\n";
$out .= "User-Agent: Mozilla/5.0\r\n";
$out .= "Connection: Close\r\n\r\n";

$fp = fsockopen($proxyhost, $proxyport);

if ($fp) {
// передаем запрос
fwrite($fp,$out);
// читаем ответ
while (!feof($fp)) {
$http_response = fgets($fp, 1024);
if (preg_match("/^HTTP\/1\.\d (\d+) (.*)/", $http_response, $found)) {
$response_code = $found[1];
$response_text = $found[2];
break;
}
}
print_r($http_response);
}
else {
echo "2";
}

if ($response_code = 200) {
echo "1";
}
?>

HTTP/1.1 200 OK 1 и все

если


$out .= "GET http://www.ageent.ru/moi-rasshirenija-joomla/284-plagin-dlja-translita-russkij-bukv.html HTTP/1.1\r\n";

то то-же самое HTTP/1.1 200 OK 1 и все

K
На сайте с 12.07.2006
Offline
295
Kpd
#3

Вместо

        $http_response = fgets($fp, 1024);  

if (preg_match("/^HTTP\/1\.\d (\d+) (.*)/", $http_response, $found)) {
$response_code = $found[1];
$response_text = $found[2];
break;
}

сделайте

        echo fgets($fp, 1024);

и посмотрите что скрипт выводит без обработки. Скорее всгео ошибка в этом куске

A
На сайте с 03.10.2009
Offline
6
#4

Kpd спасибо за помощь, но google свой контент отдавать не хочет )

фиг сграбишь http://translate.google.com/translate_a/t?client=t&text=google%20%D1%82%D1%8B%20*****&sl=ru&tl=en&pc=0&oc=3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий