Почему не удаётся залогиниться? Сервер перенаправляет на страницу с ошибкой. PHP: <?php $fp = fsockopen("win.mail.ru", 80, $errno, $errstr, 30); //проверяем успешность установки соединения if(!$fp) echo "$errstr($errno)<br>/>\n"; else { //данные HTTP-запроса $data= 'Login='.urlencode("vsvsfb").'&Domain='.urlencode("mail.ru").'&Password='.urlencode("654321q")."\r\n\r\n"; //Заголовок HTTP-запроса $headers="POST /cgi-bin/auth HTTP/1.1\r\n"; $headers.= "Host: win.mail.ru\r\n"; $headers.= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)\r\n"; $headers.= "Content-type: application/x-www-form-urlencoded\r\n"; $headers.="Content-Length: ".strlen($data)."\r\n\r\n"; //Отправляем HTTP-запрос серверу fwrite($fp, $headers.$data); //Получаем ответ $line = ''; while(!feof($fp)) { $line.=fgets($fp, 1024); } fclose($fp); } echo "<pre>"; echo $line ; echo "</pre>"; ?> Ответ сервера: Code: HTTP/1.1 302 OK Server: nginx/0.7.62 Date: Sun, 26 Sep 2010 15:53:57 GMT Transfer-Encoding: chunked Connection: close Location: http://win.mail.ru/cgi-bin/login?email=vsvsfb@mail.ru&fail=1 Set-Cookie: mrcu=641D4C9F6C950BE6665F0100007F; expires=Wed, 23 Sep 2020 15:53:57 GMT; path=/; domain=.mail.ru X-Host: f267.mail.ru 0
PHP: <?php if($ch = curl_init('https://auth.mail.ru/cgi-bin/auth')) { curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.9.0'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_REFERER, 'http://win.mail.ru'); curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, 'Login=vsvsfb&Domain=mail.ru&Password=654321q'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_NOBODY, 0); $content = curl_exec($ch); echo $content; }
Ты не указал Content-length $headers.= "Content-length: ".strlen($data)."\r\n"; серверу надо знать сколько инфы ты ему передаёшь, сколько ему ждать curl это всё сам подсчитывает
у меня же указано в запросе: PHP: $headers.="Content-Length: ".strlen($data)."\r\n\r\n"; 2 Isis: curl не хочется использовать
может это не решит проблему, но в конце не должно быть \r\n\r\n тут: //данные HTTP-запроса $data= 'Login='.urlencode("vsvsfb").'&Domain='.urlencode("mail.ru").'&Password='.urlencode("654321q")."\r\n\r\n"; ps: я уже выкладывал функцию на сокетах для http запроса: /showthread.php?p=2156929#post2156929 только там я считал длину Content-Legth из принципа "Длина тела объекта (entity-body) - это длина тела сообщения (message-body), полученного после декодирования всех кодирований передачи."