PHP сокеты

Discussion in 'PHP' started by Krist_ALL, 8 Aug 2009.

  1. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    Доброго времени суток.
    Опять я эти сокеты не понимаю, и прошу помощи.
    План:
    я посылаю пакет
    принимаю ответ
    -дальше проблемы-
    я опять посылаю пакет
    я принимаю ответ
    ...
    ...
    ...
    Первый раз запись/чтение норм,а потом не получаю ответа. Набрасайте скрипт..Плз) порт 80 и эт не джаббер и ответ всегда 1.
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Сокет закрывать-открывать после отправки не забываешь?
     
    _________________________
  3. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    Забываю... А нада?Разьве на каждый пакет надо новый сокет?Вроде нет.
     
  4. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Да надо, либо используй сокеты низкого уровня и переводи в неблокирующий режим
     
    _________________________
  5. ElteRUS

    ElteRUS Elder - Старейшина

    Joined:
    11 Oct 2007
    Messages:
    367
    Likes Received:
    460
    Reputations:
    93
    PHP:
    $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. И так по циклу сколько хочешь
     
    1 person likes this.
  6. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    тс, тебе нужно тупо получить страницу? тогда вот - http://mrthe.name/2009/03/sockets-php/

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

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    Всем большое спасибо.
     
  8. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    Решил не создавать новую тему..
    Подскажите самый простой Http запрос .
    измучился уже.
    Взял пример из википедии:
    обращаюсь и пишет бэд реквест.

    я хз )
     
  9. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Покажи код
     
    _________________________
  10. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    PHP:
    $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); 

     
  11. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    после Connection: close напиши \r\n\r\n
     
    _________________________
  12. Tigger

    Tigger Elder - Старейшина

    Joined:
    27 Aug 2007
    Messages:
    936
    Likes Received:
    527
    Reputations:
    204
    Что будет означать нулевой POST запрос. Учим протокол http ;)
     
  13. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Что будет означать обычный гет запрос. Учимся смотреть контекст ответа.
    /showpost.php?p=1445002&postcount=10
     
    _________________________
    1 person likes this.
  14. PaCo

    PaCo Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Что будет означать не правильно сформированый GET запрос - учим RFC 2068.
     
  15. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Что неправильного в запросе

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

    ?
     
    _________________________
    2 people like this.
  16. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    После последнего заголовка должна идти пустая строка. Так было испокон веков. О каких неправильных запросах идет речь?

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

    PHP:
    function("$variable"); // не тру
    function($variable); // тру
     
    #16 mailbrush, 11 Aug 2009
    Last edited: 11 Aug 2009
  17. PaCo

    PaCo Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Я про то что если в хедаре отсылаеться GET то он как GET и будет обрабатываться, в твоем примере все правильно.