POST HTTP запрос на PHP
Код:
<?php
$fp=fsockopen("www.ukr.net", 80, $errno, $errstr, 30);
if(!$fp){
echo "$errstr ($errno)<br>\n";
}
else {
$data="Login=login&Password=pass";
$query = "POST /index.php HTTP/1.1\r\n";
$query .= "Host: www.ukr.net\r\n";
$query .= "Content-Type: application/x-www-form-urlencoded\r\n";
$query .= $data;
$query .= "Connection: Close\r\n\r\n";
fwrite($fp, $query);
while (!feof($fp)) {
$page = fgets($fp, 128);
echo $page;
}
fclose($fp);
}
?>
$fp=fsockopen("www.ukr.net", 80, $errno, $errstr, 30);
if(!$fp){
echo "$errstr ($errno)<br>\n";
}
else {
$data="Login=login&Password=pass";
$query = "POST /index.php HTTP/1.1\r\n";
$query .= "Host: www.ukr.net\r\n";
$query .= "Content-Type: application/x-www-form-urlencoded\r\n";
$query .= $data;
$query .= "Connection: Close\r\n\r\n";
fwrite($fp, $query);
while (!feof($fp)) {
$page = fgets($fp, 128);
echo $page;
}
fclose($fp);
}
?>
После его выполнения получаю страницу сайта, но авторизация на сайте не происходит, никакого сообщения о не правильности введенных мною данных нету. Может я составил не правильно http запрос? Или в чем дело? Заранее спасибо :)
При POST-запросе обязательным является заголовок Content-Length.
Ну добавил я $query .= "Content-Length: 25\r\n"; При запуске скрипта идет долгое подключение к серверу, а потом выдает ошибку "Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\localhost\www\req\q.php on line 19" Может после POST нужно писать не "/index.php", а какой-то другой путь. Сама форма авторизации находится на главной странице сайта.
Код:
$data = "Login=login&Password=pass";
$query = "POST /index.php HTTP/1.1\r\n";
$query .= "Host: www.ukr.net\r\n";
$query .= "Content-Type: application/x-www-form-urlencoded\r\n";
$query .= "Content-Length: ".strlen($data);
$query .= "Connection: Close\r\n\r\n";
$query .= $data;
fwrite($fp, $query);
$query = "POST /index.php HTTP/1.1\r\n";
$query .= "Host: www.ukr.net\r\n";
$query .= "Content-Type: application/x-www-form-urlencoded\r\n";
$query .= "Content-Length: ".strlen($data);
$query .= "Connection: Close\r\n\r\n";
$query .= $data;
fwrite($fp, $query);
[QUOTE=wolfThGun]
Может после POST нужно писать не "/index.php", а какой-то другой путь. Сама форма авторизации находится на главной странице сайта.
[/QUOTE]
Посмотрите в исходном коде главной страницы, какой путь прописан в атрибуте action этой формы, туда и обращайтесь.