PDA

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


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

POST http://win.mail.ru/cgi-bin/auth HTTP/1.1
Content-Type: application/x-www-form-urlencoded
page=&post=&login_from=&Login=user&Domain=mail.ru&Password=1234

Но у меня хоть убей не вышло сделать тоже самое на php. Всегда пишет 400 Bad Request или ещё что-нибудь. Сокеты включены, все включено. Дело в скрипте. Часа два уже вожусь и сдвигов - ноль. Вот код, который я юзал:

<?php
// открываем сокет на хост: локалост и на 80 порт (стандартный веб)
$fp = fsockopen('win.mail.ru', 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
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($fp, 1024);
}
fclose($fp);
}
echo $line;
?>

Спасите меня плз :( Как отправить эти сраные заголовки на серв? Объясните хотя бы принцип... что у меня не так? Плз не предлагайте cURL юзать. Он как-то странно пашет (из четырех хостов, где он установлен, работает только на одном) и не везде есть, к тому же. Пасиб

Kaimi
15.04.2009, 18:34
<?php

$fp = fsockopen('win.mail.ru', 80, $errno, $errstr, 30);

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($fp, 1024);
}
fclose($fp);
echo $line;
}

?>

sNt
15.04.2009, 18:37
Спс большое ))

wildshaman
15.04.2009, 18:38
Нужно сделать имитацию авторизации путем анализа заголовков. При отсылке нижеследующего заголовка через стороннюю программу все пашет и авторизируется:

POST http://win.mail.ru/cgi-bin/auth HTTP/1.1
Content-Type: application/x-www-form-urlencoded
page=&post=&login_from=&Login=user&Domain=mail.ru&Password=1234

Но у меня хоть убей не вышло сделать тоже самое на php. Всегда пишет 400 Bad Request или ещё что-нибудь. Сокеты включены, все включено. Дело в скрипте. Часа два уже вожусь и сдвигов - ноль. Вот код, который я юзал:

<?php
// открываем сокет на хост: локалост и на 80 порт (стандартный веб)
$fp = fsockopen('win.mail.ru', 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
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($fp, 1024);
}
fclose($fp);
}
echo $line;
?>

Спасите меня плз :( Как отправить эти сраные заголовки на серв? Объясните хотя бы принцип... что у меня не так? Плз не предлагайте cURL юзать. Он как-то странно пашет (из четырех хостов, где он установлен, работает только на одном) и не везде есть, к тому же. Пасиб

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

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