Проблемы с отсылкой заголовков через PHP

Discussion in 'PHP' started by sNt, 15 Apr 2009.

  1. sNt

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

    Joined:
    30 Jul 2008
    Messages:
    117
    Likes Received:
    11
    Reputations:
    1
    Нужно сделать имитацию авторизации путем анализа заголовков. При отсылке нижеследующего заголовка через стороннюю программу все пашет и авторизируется:

    PHP:
    POST http://win.mail.ru/cgi-bin/auth HTTP/1.1
    Content-Typeapplication/x-www-form-urlencoded
    page
    =&post=&login_from=&Login=user&Domain=mail.ru&Password=1234
    Но у меня хоть убей не вышло сделать тоже самое на php. Всегда пишет 400 Bad Request или ещё что-нибудь. Сокеты включены, все включено. Дело в скрипте. Часа два уже вожусь и сдвигов - ноль. Вот код, который я юзал:

    PHP:
    <?php 
    // открываем сокет на хост: локалост и на 80 порт (стандартный веб) 
        
    $fp fsockopen('win.mail.ru'80$errno$errstr30);  
        
    // Проверяем успешность установки соединения 
        
    if (!$fp) echo "$errstr ($errno)<br />\n";  
        else 
        {  
          
    $headers "POST http://win.mail.ru/cgi-bin/auth HTTP/1.1"// отвечает за тип протокола! 
          
    $headers .= "Host: mail.ru\r\n";  
          
    $headers .= "Referer: http://www.site.ru/index.html\r\n"
          
    $headers .= "Cookie: income=1\r\n"
          
    $headers .= "Content-Type: application/x-www-form-urlencoded"
          
    $headers .= "Content-Length: 35\r\n"
          
    $headers .= ": \r\n"
          
    $headers .= "page=&post=&login_from=&Login=user&Domain=mail.ru&Password=1234";
          
    $headers .= "Connection: Close";  
          
    // Отправляем HTTP-запрос серверу 
          
    fwrite($fp$headers);  
          
    // Получаем ответ 
          
    $line=''
          while (!
    feof($fp)) 
          {  
            
    $line .= fgets($fp1024);  
          }  
          
    fclose($fp);  
        }  
        echo 
    $line;  
    ?>
    Спасите меня плз :( Как отправить эти сраные заголовки на серв? Объясните хотя бы принцип... что у меня не так? Плз не предлагайте cURL юзать. Он как-то странно пашет (из четырех хостов, где он установлен, работает только на одном) и не везде есть, к тому же. Пасиб
     
    #1 sNt, 15 Apr 2009
    Last edited: 15 Apr 2009
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    PHP:
    <?php 

    $fp 
    fsockopen('win.mail.ru'80$errno$errstr30);  

    if (
    $fp)
        {  
          
    $data "Login=login&Domain=mail.ru&Password=pass";
          
    $headers  "POST /cgi-bin/auth HTTP/1.1\n"// отвечает за тип протокола! 
          
    $headers .= "Host: win.mail.ru\n";
          
    $headers .= "Connection: close\n";
          
    $headers .= "Content-Type: application/x-www-form-urlencoded\n"
          
    $headers .= "Content-Length: ".strlen($data)."\n\n".$data

          
    fwrite($fp$headers);  
          
    $line=''
          while (!
    feof($fp)) 
          {  
            
    $line .= fgets($fp1024);  
          }  
          
    fclose($fp);  
          echo 
    $line;  
        }  

    ?> 
     
    _________________________
    1 person likes this.
  3. sNt

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

    Joined:
    30 Jul 2008
    Messages:
    117
    Likes Received:
    11
    Reputations:
    1
    Спс большое ))
     
  4. wildshaman

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

    Joined:
    16 Apr 2008
    Messages:
    478
    Likes Received:
    483
    Reputations:
    99
    Скорее Всего, трабла в Content-Length: 35

    Юзай курл, там все проще :)
     
    1 person likes this.