PDA

Просмотр полной версии : PHP сокеты


Krist_ALL
08.08.2009, 20:05
Доброго времени суток.
Опять я эти сокеты не понимаю, и прошу помощи.
План:
я посылаю пакет
принимаю ответ
-дальше проблемы-
я опять посылаю пакет
я принимаю ответ
...
...
...
Первый раз запись/чтение норм,а потом не получаю ответа. Набрасайте скрипт..Плз) порт 80 и эт не джаббер и ответ всегда 1.

Kaimi
08.08.2009, 20:09
Сокет закрывать-открывать после отправки не забываешь?

Krist_ALL
08.08.2009, 20:15
Забываю... А нада?Разьве на каждый пакет надо новый сокет?Вроде нет.

Kaimi
08.08.2009, 20:24
Да надо, либо используй сокеты низкого уровня и переводи в неблокирующий режим

ElteRUS
08.08.2009, 20:26
$header = "GET http://rambler.ru/ HTTP/1.0\r\n";
$header .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n";
$header .= "Accept-Language: uk\r\n";
$header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\r\n";
$header .= "Host: www.rambler.ru\r\n";
$header .= "Proxy-Connection: Keep-Alive\r\n\r\n";

$sckt = fsockopen("www.rambler.ru",80);
fputs($sckt,$header);

while(!feof($sckt))
{
$serv_answer = fgets($sckt,2048);

if($s = strstr($serv_answer,"ruid=")) // извлекаем переменную ruid из заголовка Set-Cookie ответа сервера
{
$ruid = substr($s,5,24);
}
}

fclose($sckt);

//авторизируемся

$auth_data = "domain=rambler.ru&url=7&login=".$login."&passw=".$password;
$auth_data_len = strlen($auth_data);

$header = "POST http://mail.rambler.ru/script/auth.cgi HTTP/1.0\r\n";
$header .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n";
$header .= "Referer: http://www.rambler.ru/\r\n";
$header .= "Accept-Language: uk\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Proxy-Connection: Keep-Alive\r\n";
$header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\r\n";
$header .= "Host: mail.rambler.ru\r\n";
$header .= "Content-Length: ".$auth_data_len."\r\n";
$header .= "Pragma: no-cache\r\n";
$header .= "Cookie: ruid=".$ruid."\r\n\r\n";
$header .= $auth_data;

$sckt = fsockopen("mail.rambler.ru",80);
fputs($sckt,$header);

while(!feof($sckt))
{
$serv_answer = fgets($sckt,2048);

if($s = strstr($serv_answer,"rsid=")) // извлекаем переменную rsid из заголовка Set-Cookie ответа сервера
{
$rsid = substr($s,5,32);
}

if($s = strstr($serv_answer,"rup=")) // извлекаем переменную rup из заголовка Set-Cookie ответа сервера
{
$rup = substr($s,4,24);
}

if($s = strstr($serv_answer,"startpage%3F")) // извлекаем урл редиректа из заголовка Location ответа сервера
{
$startpage = substr($s,12,4);
}
}

fclose($sckt);



1 сформировали пакет
2 открыли сокет
3 отправили пакет
4 получили ответ, отпарсили необходимую инфу
5 закрыли сокет
6 вернулись в пункт 1. И так по циклу сколько хочешь

mr.The
08.08.2009, 20:42
тс, тебе нужно тупо получить страницу? тогда вот - http://mrthe.name/2009/03/sockets-php/

а вообще советую юзать курл.

Krist_ALL
08.08.2009, 20:54
Всем большое спасибо.

Krist_ALL
11.08.2009, 13:11
Решил не создавать новую тему..
Подскажите самый простой Http запрос .
измучился уже.
Взял пример из википедии:

GET / HTTP/1.1
Host: mail.ru
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: close

обращаюсь и пишет бэд реквест.

я хз )

Kaimi
11.08.2009, 13:12
Покажи код

Krist_ALL
11.08.2009, 13:36
$header = "GET / HTTP/1.1\r\n";
$header .= "Host: $server\r\n";
$header .= "Accept: text/html\r\n";
$header .= "Connection: close\r\n";
$sckt = fsockopen("$server",80);
fputs($sckt,$header);

while(!feof($sckt))
{
$serv_answer = fgets($sckt,2048);

echo $serv_answer.'<br><br>';
}

fclose($sckt);

Kaimi
11.08.2009, 14:02
после Connection: close напиши \r\n\r\n

Tigger
11.08.2009, 16:47
после Connection: close напиши \r\n\r\n

Что будет означать нулевой POST запрос. Учим протокол http ;)

Kaimi
11.08.2009, 16:48
Что будет означать обычный гет запрос. Учимся смотреть контекст ответа.
https://forum.antichat.ru/showpost.php?p=1445002&postcount=10

PaCo
11.08.2009, 17:31
Что будет означать нулевой POST запрос. Учим протокол http ;)
Что будет означать не правильно сформированый GET запрос - учим RFC 2068 (http://lib.ru/WEBMASTER/rfc2068/rfc2068rus.txt).

Kaimi
11.08.2009, 21:59
Что будет означать не правильно сформированый GET запрос - учим RFC 2068.

Что неправильного в запросе

GET / HTTP/1.1\r\n
Host: mail.ru\r\n
Accept: text/html\r\n
Connection: close\r\n\r\n

?

mailbrush
11.08.2009, 22:16
После последнего заголовка должна идти пустая строка. Так было испокон веков. О каких неправильных запросах идет речь?

ЗЫ: Krist_ALL, не надо переменные сувать в кавычки.

function("$variable"); // не тру
function($variable); // тру

PaCo
12.08.2009, 14:57
Что неправильного в запросе

GET / HTTP/1.1\r\n
Host: mail.ru\r\n
Accept: text/html\r\n
Connection: close\r\n\r\n

?
Я про то что если в хедаре отсылаеться GET то он как GET и будет обрабатываться, в твоем примере все правильно.