PDA

Показать полную графическую версию : HTML parser


SliderVM
08-05-2008, 23:54
Вот код который у меня есть, но проблемма в том, что я не получаю целевую страницу... В чем моя ошибка подскажите :(


function get_content($host, $get="/") {
$filePointer = fsockopen($host, 80, $errorNumber, $errorString);
if (!$filePointer)
{
exit('Failed opening http socket connection: '.$errorString.' ('.$errorNumber.')<br/>\n');
}

$requestHeader = "GET " . $get . " HTTP/1.1\r\n";
$requestHeader.= "Host: ".$host."\r\n";
$requestHeader.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3\r\n";
$requestHeader.= "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n";
$requestHeader.= "Accept-Language: ru,en;q=0.5\r\n";
$requestHeader.= "Accept-Charset: windows-1251;q=0.7,*;q=0.7\r\n";
$requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n";
$requestHeader.= "Connection: close\r\n";
$requestHeader.= "Referer: \r\n\r\n";

fwrite($filePointer, $requestHeader);

$responseHeader = '';
$responseContent = '';

do {
$responseHeader.= fread($filePointer, 1);
}
while ( !preg_match('/\\r\\n\\r\\n$/', $responseHeader) );

if (!strstr($responseHeader, "Transfer-Encoding: chunked")) {
while (!feof($filePointer)) {
$responseContent.= fgets($filePointer, 128);
}
}
else {
while ($chunk_length = hexdec(fgets($filePointer))) {
$responseContentChunk = '';
$read_length = 0;
while ($read_length < $chunk_length) {
$responseContentChunk .= fread($filePointer, $chunk_length - $read_length);
$read_length = strlen($responseContentChunk);
}

$responseContent.= $responseContentChunk;
fgets($filePointer);
}

}
return $responseContent;
}

echo get_content("ufacars.myminicity.com");

Sham
09-05-2008, 00:10
SliderVM, есть же теги

while ( !preg_match('/\\r\\n\\r\\n$/', $responseHeader) );
А зачем экраны дублированы?

bruder
09-05-2008, 11:51
все дело в бесконечном цикле

while ($read_length < $chunk_length) {
$responseContentChunk .= fread($filePointer, $chunk_length - $read_length);
$read_length = strlen($responseContentChunk);
}

там $read_length всегда 0. А я с soketами совсем незнаком. Неужели чтобы получить контент страницы надо так сложно? Прошу профи объяснить на пальцах этот метод, очень интересно

rus-4-ever
10-05-2008, 13:10
Может так лучше??? по крайней мере работает!!!

Тут файл записыватся в массив построчно


if (!($arr=file("http://yandex.ru","r"))) {die("извините, сервис временно недоступен");}

$j=0;

do
{
//Код...

$j++;
}
while ($j<count($arr));

SliderVM
11-05-2008, 08:34
yandex.ru и у меня получается скопировать... А вот к примеру "ufacars.myminicity.com" так не работает :( Цель у меня распарсить именно "ufacars.myminicity.com".

Busla
11-05-2008, 12:04
заголовок темы поменяй на более соответствующий содержанию - может больше толковых советов напишут ;)

SliderVM
11-05-2008, 12:10
Название темы правильное:) "ufacars.myminicity.com" это только один из многих сайтов!

Busla
11-05-2008, 14:23
приведённый код парсит http, а html он извлекает (иногда ;) )

SliderVM
11-05-2008, 15:18
Ну а как сделать что бы извлечь код HTML?

Sham
11-05-2008, 19:24
SliderVM, обрати внимание на мой пост и посуди - цикл заканчивается, когда получены все заголовки, т.о. контент не включается... (при условии, что регулярка корректно работает, в чем я не уверен)....

SliderVM
11-05-2008, 19:33
SliderVM, обрати внимание на мой пост и посуди - цикл заканчивается, когда получены все заголовки, т.о. контент не включается... (при условии, что регулярка корректно работает, в чем я не уверен).... »


Контент выдается вот эта надпись "Please wait a few moments..." но почему ОНА???

Sham
11-05-2008, 19:49
$requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n";
А зачем этот заголовок отсылается? afaik он только для POST-данных....

SliderVM
11-05-2008, 20:41
А зачем этот заголовок отсылается? afaik он только для POST-данных.... »

Я же говорю скрипт не я писал, многое в нем не понимаю :(

Поэтому и обратился сюда!

Sham
12-05-2008, 03:37
"Please wait a few moments..." »
это ж надо тот скрипт смотреть, чего он выдает....

а упомянутый мной хедер таки лучше убрать (строку закомментировать)...

SliderVM
12-05-2008, 11:25
это ж надо тот скрипт смотреть, чего он выдает.... »

Если Регетом качать то сохраняется то что надо, а скриптом не как :(




© OSzone.net 2001-2012