Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Проблемы с отсылкой заголовков через PHP (https://forum.antichat.xyz/showthread.php?t=116067)

sNt 15.04.2009 18:18

Проблемы с отсылкой заголовков через PHP
 
Нужно сделать имитацию авторизации путем анализа заголовков. При отсылке нижеследующего заголовка через стороннюю программу все пашет и авторизируется:

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 юзать. Он как-то странно пашет (из четырех хостов, где он установлен, работает только на одном) и не везде есть, к тому же. Пасиб

Kaimi 15.04.2009 18:34

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;  
    }  

?>


sNt 15.04.2009 18:37

Спс большое ))

wildshaman 15.04.2009 18:38

Цитата:

Сообщение от sNt
Нужно сделать имитацию авторизации путем анализа заголовков. При отсылке нижеследующего заголовка через стороннюю программу все пашет и авторизируется:

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 юзать. Он как-то странно пашет (из четырех хостов, где он установлен, работает только на одном) и не везде есть, к тому же. Пасиб

Скорее Всего, трабла в Content-Length: 35

Юзай курл, там все проще :)


Время: 12:35