[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: и снова yandex XML
pavel
Пытаюсь получить ответ на запрос от yandex xml следующим нехитрым кодом smile.gif
Код
<?php
    $hostname="xmlsearch.yandex.ru";
    $path="/xmlsearch/";

    $fp=fsockopen($hostname,80,$errno,$errstr,30);
    if (!$fp) echo "$errstr ($errno)<br />\n";
    else
    {
        $data='<?xml version="1.0" encoding="windows-1251"?>'."\r\n";
        $data.="<request>\r\n";
        $data.="<query>yandex</query>\r\n";
        $data.="<groupings>\r\n";
        $data.="<groupby attr=\"d\" mode=\"deep\" groups-on-page=\"10\"  docs-in-group=\"1\" />\r\n";
        $data.="</groupings>\r\n";
        $data.="</request>\r\n";
        
        $headers="POST $path HTTP/1.1\r\n";
        $headers.="Host: $hostname\r\n";
        $headers.="Content-type: text/html;charset=utf-8\r\n";
        $headers.="Content-length: ".strlen($data)."\r\n\r\n";
        fwrite($fp, $headers.$data);

        $txt='';
        while(!feof($fp))
        {
            $line=fgets($fp,1024);
            $txt.=$line;
        }
        fclose($fp);
    }

    
    $pos=strpos($txt,"\r\n\r\n");
    $header_out=substr($txt,0,$pos);
    $txt_out=substr($txt,$pos);
    
    header($header_out);
    header("Content-type: text/xml;charset=utf-8");
    
    $txt_out=substr($txt_out,strpos($txt_out,'<?xml'));
    echo $txt_out;

?>


В ответ приходит вроде как xml-ник, но местами встречаются какие-то непонятные цифры и буквы smile.gif
Что может быть?



Спустя 30 минут, 6 секунд (29.10.2007 - 16:37) vasa_c написал(а):
Во-первых, используйте HTTP/1.0, потому что в 1.1 сервер может использовать chunked-кодирование, 100-е ответы и еще много интересных вещей, которые вам ни к чему.
Во-вторых, разберитесь с кодировками. То 1251 у вас, то utf.
В-третих, вы уверены что в ответе перенос строки именно "\r\n", а не просто "\n", например.
В-четвертых, в запросе в content-type не нужен text/html (тем более у вас xml), а для POST-данных нужно - "application/x-www-form-urlencoded"

Спустя 25 минут, 20 секунд (29.10.2007 - 17:02) pavel написал(а):
Цитата(vasa_c @ 29.10.2007, 16:37) [snapback]28692[/snapback]
Во-первых, используйте HTTP/1.0, потому что в 1.1 сервер может использовать chunked-кодирование, 100-е ответы и еще много интересных вещей, которые вам ни к чему.
Во-вторых, разберитесь с кодировками. То 1251 у вас, то utf.
В-третих, вы уверены что в ответе перенос строки именно "\r\n", а не просто "\n", например.
В-четвертых, в запросе в content-type не нужен text/html (тем более у вас xml), а для POST-данных нужно - "application/x-www-form-urlencoded"

Спасибо. wink.gif Коротко и понятно. Помогло изменение версии протокола на HTTP/1.0


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.