Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильные заголовки для fsockopen, разбираюсь как работают парсеры 
V
    Опции темы
ageent
Дата 2.10.2009, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 9.1.2009

Репутация: нет
Всего: нет



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

<?php
$proxyhost = "78.153.210.191";
$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 .= "Keep-Alive: 300" . "\r\n";
$http_request .= "Connection: keep-alive" . "\r\n";
$http_request .= "Cache-Control: max-age=0". "\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";
}
?>

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

Это сообщение отредактировал(а) ageent - 3.10.2009, 08:56
PM MAIL WWW   Вверх
capitan
Дата 5.10.2009, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: нет
Всего: 13



ageent,  А чем не устраивает CURL? Гораздо удобнее писать парсеры с помощью его.
PM MAIL WWW ICQ   Вверх
NewDima
Дата 5.10.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



ageent, при первом чтении ты проверяешь заголовок. И естественно он находится и работает бряк. Остальное ты не получишь (то, что далее 1024-го байта).
Во-вторых, при полном получении заголовка вы все-равно неправильно полуьзуетесь регуляркой
PM ICQ   Вверх
Djinn
Дата 6.10.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



Цитата(ageent @  2.10.2009,  22:33 Найти цитируемый пост)
Код

<?php
$proxyhost = "78.153.210.191";
$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 .= "Keep-Alive: 300" . "\r\n";
$http_request .= "Connection: keep-alive" . "\r\n";
$http_request .= "Cache-Control: max-age=0". "\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";
}
?>


Break; неправильно стоит...
а вообще стоит курл использовать... получше будет явно... Да и регулярка реально стремная smile
PM MAIL   Вверх
ageent
  Дата 15.10.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 9.1.2009

Репутация: нет
Всего: нет



Всем спасибо за ответы.   smile 

Это сообщение отредактировал(а) ageent - 15.10.2009, 21:30
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.