За последние 24 часа нас посетили 52530 программистов и 1797 роботов. Сейчас ищут 829 программистов ...

Автосабмиттер

Тема в разделе "PHP для новичков", создана пользователем Adamant, 14 янв 2008.

  1. Adamant

    Adamant Активный пользователь

    С нами с:
    8 апр 2007
    Сообщения:
    234
    Симпатии:
    0
    Адрес:
    Казахстан г.Тараз
    Уважаемые программисты, нужна ваша помощь.
    Осваиваю HTTP. Решил написать автосабмиттер для тренировки.Не могу понять в чем дело. Скрипт должен авторизовываться на сайте методом пост.

    Взял за образец сайт loadit.ru , (думаю ни кого не обижу).
    Форма для входа такая:
    Код (Text):
    1.  
    2. <form method="post">
    3.  <input name="login_name" type="text">
    4.  <input name="login_password" type="password">
    5.  <input name="login" type="hidden" id="login" value="submit">
    6. </form>
    Скрипт такой:
    PHP:
    1. //Логин и пароль 666666
    2. $fp = fsockopen("loadit.ru", 80, $errno, $errstr, 30);
    3. if (!$fp)
    4.   {
    5.     echo "$errstr ($errno)<br>\n";
    6.     exit();
    7.   }
    8. $post_data = "login_name=666666&login_password=666666&login=submit";
    9. $out  = "POST / HTTP/1.1\r\n";
    10. $out .= "Host: loadit.ru\r\n";
    11. $out .= "Connection: Close\r\n\r\n";
    12. $out .= "Accept: text/html;\r\n";
    13. $out .= "Referer: [url=http://loadit.ru]http://loadit.ru[/url]\r\n";
    14. $out .= "Connection: Close\r\n";
    15. $out .= "Content-Length: ".strlen($post_data)."\r\n";
    16. $out .= "Content-type: application/x-www-form-urlencoded\r\n\r\n";
    17. $out .= $post_data;
    18. fwrite($fp, $out);
    19.  
    20. $result = '';
    21. while (!feof($fp))
    22.   {
    23.     $result .= fgets($fp, 128);
    24.   }
    25. fclose($fp);
    26.  
    27. // зарегились
    28. $fp = fsockopen("loadit.ru.", 80, $errno, $errstr, 30);
    29. if (!$fp)
    30.   {
    31.     echo "$errstr ($errno)<br />\n";
    32.     exit();
    33.   }
    34. preg_match_all('/Set-Cookie: ([^;]+)/',$result,$cook,PREG_PATTERN_ORDER);
    35. echo "<pre>";
    36. print_r($cook);
    37. echo "</pre><br />";
    38. $out = "GET / HTTP/1.0\r\n";
    39. $out.= "Cookie: ".implode("; ",$cook[1])."\r\n\r\n";
    40. fwrite($fp, $out);
    41. while (!feof($fp))
    42.   {
    43.     echo "<pre>";
    44.     echo fgets($fp, 128);
    45.     echo "</pre>";
    46.   }
    47. fclose($fp);  
    Сервер прислал такие заголовки:
    Код (Text):
    1. Array  
    2. (  
    3.   [0] => Array  
    4.     (  
    5.       [0] => Set-Cookie: PHPSESSID=ac75f6d75f4a7c9110deba355d5d2b4a  
    6.     )  
    7.  
    8.   [1] => Array  
    9.     (  
    10.       [0] => PHPSESSID=ac75f6d75f4a7c9110deba355d5d2b4a  
    11.     )  
    12.  
    13. )  
    14.  
    15.  
    16. HTTP/1.1 200 OK  
    17.  
    18. Date: Sun, 13 Jan 2008 00:34:27 GMT  
    19.  
    20. Server: Apache/2  
    21.  
    22. Last-Modified: Wed, 24 Oct 2007 22:56:55 GMT  
    23.  
    24. ETag: "2060403-2c-8b59bc0"  
    25.  
    26. Accept-Ranges: bytes  
    27.  
    28. Content-Length: 44  
    29.  
    30. Vary: Accept-Encoding,User-Agent  
    31.  
    32. Connection: close  
    33.  
    34. Content-Type: text/html  
    35.  
    36. Apache is functioning normally  
    Авторизоваться не получается. Несколько дней провел за чтением мануалов, но не нашел ответа на свою проблему.
    Как получить тело самой страницы, которая после этого отображается?
    Пробовал потом смотреть readfile этой же страницы, но там авторизации нет. Вот и не знаю, что мне с этим делать?
    Просьба проявить благосклонность и не закрывать сразу этот топик (понимаю, что вызываю негодование у профи "сколько можно объяснять", но действительно я не нашел ни на этом форуме ни на других именно на этот вопрос ответа).
    С уважением Вячеслав.