Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Разработка и сопровождение сайтов (http://forum.sape.ru/forumdisplay.php?f=29)
-   -   не могу побороть ping сервис Яши (http://forum.sape.ru/showthread.php?t=46884)

BIOHAZARD 08.02.2010 16:16

не могу побороть ping сервис Яши
 
На странице http://blogs.yandex.ru/pings/info/ беру код запроса к пинг серверу
Код:

POST /RPC2 HTTP/1.1
Host: ping.blogs.yandex.ru
Content-Type: text/xml
Content-length: 318

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
    <methodName>weblogUpdates.ping</methodName>
    <params>
        <param>
            <value>Лучший подарок — это книга</value>
        </param>
        <param>
            <value>http://clubs.ya.ru/company/rss/posts.xml</value>
        </param>
    </params>
</methodCall>

формирую свой запрос по образцу выше
PHP код:

$message = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<methodCall>
    <methodName>weblogUpdates.ping</methodName>
    <params>
        <param>
            <value>
$title</value>
        </param>
        <param>
            <value>
$href</value>
        </param>
    </params>
</methodCall>"
;

$ch curl_init();
curl_setopt($chCURLOPT_URL"$url");
curl_setopt($chCURLOPT_CONNECTTIMEOUT2);
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS"$message");
$result curl_exec($ch);
curl_close($ch);

Гоша таким запросом вполне доволен, а Яша матюкается, выдаёт тупо
Код:

<?xml version="1.0" encoding="iso-8859-1"?>
<title>400 - Bad Request</title>
<h1>400 - Bad Request</h1>

Может подскажете, где тут собака зарыта? А то уже не знаю где копать.

ahsinis 08.02.2010 16:24

Разве POST данные не надо encode'ить?
Попробуйте завернуть $message в rawurlencode

BIOHAZARD 08.02.2010 16:34

@$&, не в тот раздел закинул, хотел в Разработка и сопровождение сайтов опубликовать
перекиньте кто-нибудь


Добавлено через 8 минут
Цитата:

Сообщение от ahsinis (Сообщение 725006)
Попробуйте завернуть $message в rawurlencode

При таком раскладе Яша вообще ничего не говорит, Гоша выдаёт ошибку

Sergius 08.02.2010 16:55

Цитата:

Сообщение от BIOHAZARD (Сообщение 725007)
При таком раскладе Яша вообще ничего не говорит, Гоша выдаёт ошибку

Может, это через сокеты сделать проще?
PHP код:

<?php
$mainlink
='ping.blogs.yandex.ru';
$message='сообщение';
$sock fsockopen($mainlink80); //проверить порт
$header='POST /RPC2 HTTP/1.1
Host: ping.blogs.yandex.ru
Content-Type: text/xml
Content-length: 318\n\n".$message;
fputs($sock,$header);
 while(!feof($sock)):
    $ss = fgets($sock,4096);
    echo $ss;
 endwhile;

Может где-то ошибся....

ahsinis 08.02.2010 17:45

Конечно! (невнимательно посмотрел заголовок)
Боюсь, через cURL вы не сможете послать заголовок
Код:

POST /RPC2 HTTP/1.1
Только в последнем примере надо 318 заменить на strlen($message)

Sergius 08.02.2010 19:19

Цитата:

Сообщение от ahsinis (Сообщение 725103)
Только в последнем примере надо 318 заменить на strlen($message)

Угу. Не забывая при этом , что код в мультибайтной UTF-8.

BIOHAZARD 08.02.2010 20:03

Цитата:

Сообщение от ahsinis (Сообщение 725103)
Боюсь, через cURL вы не сможете послать заголовок

эта строка формируется автоматом, иначе скрипт не знал бы к какой странице вообще обращаться

Цитата:

Сообщение от ahsinis (Сообщение 725103)
Только в последнем примере надо 318 заменить на strlen($message)

а это и вовсе необязательный параметр

maksim7 08.02.2010 20:34

BIOHAZARD, у вас с кодировками точно всё в порядке?

BIOHAZARD 08.02.2010 21:19

у меня весь сайт в утф, так что с этой стороны вопрос отпадает
хотя надо будет и это попробовать

Добавлено через 30 минут
проверил: создал запрос с $title и $href содержащими только основную латиницу - всё равно Яшка в отказ идёт, а Гоша хавает на ура

maksim7 08.02.2010 21:27

BIOHAZARD, у вас файл который запрос отправляет в какой кодировке?
и
PHP код:

$message = "<?xml version="1.0\" encoding=\"UTF-8\"?> 
...

кавычка не "прослешена" это опечатка? или в коде тоже самое? :)
PHP код:

$message = "<?xml version=\\"1.0\" encoding=\"UTF-8\"?>
<methodCall>
    <methodName>weblogUpdates.ping</methodName>
    <params>
        <param>
            <value>Тест</value>
        </param>
        <param>
            <value>http://clubs.ya.ru/company/rss/posts.xml</value>
        </param>
    </params>
</methodCall>"
;

$mainlink='ping.blogs.yandex.ru';
$sock fsockopen($mainlink80$errno$errstr30); //проверить порт
if (!$sock) {
    echo 
"$errstr ($errno)<br />\n";
} else {
    
$header="POST /RPC2 HTTP/1.1\r\n";
    
$header.="Host: ping.blogs.yandex.ru\r\n";
    
$header.="Content-Type: text/xml\r\n";
    
$header.="Content-Length: "strlen($message)."\r\n\r\n";
    
$header.=$message
    
fputs($sock,$header);
    
    while(!
feof($sock)){
        
$ss fgets($sock,128);
        echo 
$ss;
    }
    
fclose($sock);
}

даёт ответ:
PHP код:

HTTP/1.1 200 OK
Transfer
-Encodingchunked
Content
-typetext/xml
Date
Mon08 Feb 2010 18:23:52 GMT
Server
lighttpd/1.4.19 

Добавлено через 2 минуты
насчет <?xml version=\"1.0\" encoding=\"UTF-8\"?>
уже понял :)

сохраните ваш файл в utf-8
и strlen на mb_strlen поменять...

как то так


Часовой пояс GMT +3, время: 05:51.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.