Консультация № 183939
30.08.2011, 01:01
62.66 руб.
0 0 0
Здравствуйте, уважаемые эксперты! У меня возникли сложности с таким вопросом:
Пробую эмулировать сокетами постинг в форум. В этой консультации мне помогли сделать такое курлом https://rfpro.ru/question/183502 , но мне интересно изучить еще и сокеты. Мой код такой, но что-то не работает. Помогите, пожалуйста, что я делаю не так? Авторизация работает, а вот постинг - нет.

//первая часть, где авторизация, она успешна, мне ее знакомый написал.
<?php
$sock = fsockopen("testtest.flyfolder.ru",80,$er1,$er2,30);

$loginstr = "username=givi&password=111222&redirect=&login=%C2%F5%EE%E4";

$out = "POST /login.php HTTP/1.0\r\n";
$out .= "Host: testtest.flyfolder.ru\r\n";
$out .= "Referer: testtest.flyfolder.ru\r\n";
$out .= "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1\r\n";
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Content-Length: ".strlen($loginstr)."\r\n\r\n";
$out .= $loginstr;

fwrite($sock, $out);

$res = '';
while (!feof($sock))
{
$res .= fgets($sock, 128);
}
fclose($sock);

echo $res;
?>

Мой код
Код:
fclose($sock); //закрываем предыдущий сокет
sleep (1); //небольшая пауза
$sock = fsockopen("testtest.flyfolder.ru",80,$er1,$er2,30);

$arr=explode('Set-Cookie:',$res); // разбиваем ответ сервера для получения кук
/*тут получается массив вида
0] => HTTP/1.1 302 Moved Temporarily Server: nginx/0.7.65 Date: Sat, 27 Aug 2011 17:28:02 GMT Content-Type: text/html Connection: close
[1] => flbbb2_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bi%3A-1%3B%7D;
и так далее */

$cook=$arr[1]; //т.к. в массиве под ключем 1 куки, сохраняем их в переменную эту.
$message="sockets test"; //текст сообщения
$sid_str=$arr[4]; //4ая строка того же массива - куки-сид, идентификатор сессии

list ($null, $sid) = explode ("sid=", $sid_str, 2);
list ($sid, $null) = explode (";", $sid, 2);
/*эти две строки получают "чистый" sid, без лишних слов вида set-cookie */

$pststr = "message=$message&attach_sig=on&sid=$sid&mode=reply&t=16&post=%CE%F2%EF%F0%E0%E2%E8%F2%FC"; //строка для пост запроса, как требует форум.

$out="POST /posting.php HTTP/1.0\r\n";
$out .= "Host: testtest.flyfolder.ru\r\n";
$out .= "Referer: testtest.flyfolder.ru\r\n";
$out .= "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1\r\n";
$out .="Cookie: $cook;\r\n"; /* точку с запятой поставил, т.к. были проблемы, на этой строке все зависало */
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Content-Length: ".strlen($pststr)."\r\n\r\n";
$out .=$pststr;
fwrite($sock,$out);

И не работает.
Сниффер показывает лишь мой запрос, а ответа сервера нет

Обсуждение

Форма ответа