Пишу реггер на php с curl Других языков не знаю, к сожалению. Не могу понять принцип работы регистрации на на твиттере. Отправляю пост запрос сюда https://twitter.com/account/create такого вида PHP: curl_setopt($ct, CURLOPT_POSTFIELDS, 'authenticity_token=&user[name]=jjpgвowc&user[email]=b1g22в[email protected]&user[screen_name]=jjpoвwgc154&user[user_password]=jjpoвwc158745&context=&user[discoverable_by_email]=1&user[send_email_newsletter]=1'); в ответ от сервера даже заголовки не приходят, в чем может быть проблем, заранее спасибо
PHP: function check_login( $url,$cookies) { $ct = curl_init(); if(!$ct) return 0; // готовим заголовки POST запроса $head = array(); $head[] = "Accept: */*"; $head[] = "Referer: http://twitter.com/"; $head[] = "Accept-Language: ru"; $head[] = "x-requested-with: XMLHttpRequest"; $head[] = "Content-Type: application/x-www-form-urlencoded"; $head[] = "Accept-Encoding: gzip, deflate"; $head[] = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)"; $head[] = "Accept-Charset: windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1"; $head[] = "Connection: Keep-Alive"; $head[] = "Cache-Control: no-cache"; // устанавливаем опции CURL`a curl_setopt($ct, CURLOPT_HTTPHEADER, $head); curl_setopt($ct, CURLOPT_URL, $url); curl_setopt($ct, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ct, CURLOPT_HEADER, 1); curl_setopt($ct, CURLOPT_CONNECTTIMEOUT, 10); // ждем коннекта 10 секунд //curl_setopt($ct, CURLOPT_COOKIEJAR, $cookie); // куки, получаемые от сервера //curl_setopt($ct, CURLOPT_COOKIEFILE, $cookie); // куки, отправляемые серверу curl_setopt($ct, CURLOPT_PROXYAUTH, 0); curl_setopt($ct, CURLOPT_COOKIE, $cookies); curl_setopt($ct, CURLOPT_POST, 1); curl_setopt($ct, CURLOPT_POSTFIELDS, 'authenticity_token=&user[name]=jjpgowc&user[email][email protected]&user[screen_name]=jjpowgc154&user[user_password]=jjpowc158745&context=&user[discoverable_by_email]=1&user[send_email_newsletter]=1'); curl_setopt($ct, CURLOPT_ENCODING, "gzip"); curl_setopt($ct,CURLOPT_SSL_VERIFYPEER , 1); curl_setopt($ct,CURLOPT_SSL_VERIFYHOST, 2); // получаем в ответ сервера $rcont и возвращаем его $rcont = curl_exec($ct); curl_close($ct); sleep(1); return $rcont; } $url='https://twitter.com/account/create'; $content=check_login($url,''); echo $content;
Все отлично работает, строку 29 можно убрать. PHP: curl_setopt($ct, CURLOPT_PROXYAUTH, 0); Ищите внешние причины.
Есть отличия, от реального. Сначала нужно загрузить страницу https://twitter.com/signup, она присылает куки, их надо потом отправлять. Такого нет: Если стоит соединение не рвётся, поэтому, возможно, ответа и нет. Firefox посылает дополнительно
Самое странное что с http работает все нормально, а вот с https не хочет... в чем может быть проблемка все разобрался, всем спасибо PHP: curl_setopt($ct,CURLOPT_SSL_VERIFYPEER , 0); curl_setopt($ct,CURLOPT_SSL_VERIFYHOST, 0);
Теперь новая проблема: После авторизации успешно получаю куки и затем перехожу курлом на http://twitter.com в ответ приходит: Code: 403 Forbidden: The server understood the request, but is refusing to fulfill it. В чем проблема?
Margin в том что вы делаете что-то не так. Показывать нужно код, выделяя места, где, по вашему, может быть ошибка. Философские рассуждения вида "в чем проблема?" - выкиньте подальше. Как рекомендация - предлагаю смотреть пакеты в сниффере, делая одни и те же действия браузером и скриптом - если что-то отличается (а оно отличается) - повторять в точности.
PHP: function check_login( $url,$cookies,$post,$postfields) { $ct = curl_init(); if(!$ct) return 0; // готовим заголовки POST запроса $head = array(); $head[] = "Accept: */*"; $head[] = "Referer: https://twitter.com"; $head[] = "Accept-Language: ru"; $head[] = "Content-Type: application/x-www-form-urlencoded"; $head[] = "Accept-Encoding: gzip, deflate"; $head[] = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)"; $head[] = "Accept-Charset: windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1"; $head[] = "Connection: Close"; $head[] = "Cache-Control: no-cache"; // устанавливаем опции CURL`a curl_setopt($ct, CURLOPT_HTTPHEADER, $head); curl_setopt($ct, CURLOPT_URL, $url); curl_setopt($ct, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ct, CURLOPT_HEADER, 1); curl_setopt($ct, CURLOPT_CONNECTTIMEOUT, 10); // ждем коннекта 10 секунд curl_setopt($ct, CURLOPT_COOKIEJAR, 'C:\AppServ\www\cookie.txt'); // куки, получаемые от сервера curl_setopt($ct, CURLOPT_COOKIEFILE, 'C:\AppServ\www\cookie.txt'); // куки, отправляемые серверу**/ //curl_setopt($ct, CURLOPT_PROXYAUTH, 0); /*curl_setopt($ct, CURLOPT_COOKIE, $cookies);*/ curl_setopt($ct, CURLOPT_POST, $post); curl_setopt($ct, CURLOPT_POSTFIELDS, $postfields ); curl_setopt($ct, CURLOPT_ENCODING, "gzip"); curl_setopt($ct,CURLOPT_SSL_VERIFYPEER , 0); curl_setopt($ct,CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ct,CURLOPT_FOLLOWLOCATION, 1); //curl_setopt($ct, CURLOPT_PROXY, 0); // получаем в ответ сервера $rcont и возвращаем его $rcont = curl_exec($ct); curl_close($ct); sleep(1); return $rcont; } $url='https://twitter.com/sessions?phx=1'; $content=check_login($url,'',1,'session[username_or_email]=login&session[password]=pass'); echo $content; $url='http://twitter.com/'; $content=check_login($url,'',0,''); echo $content; Вот код...
Margin 1) Не забывайте удалять файл со старыми куками перед новой попыткой логина 2) Реферер передавайте, если вы "переходите" с другой страницы 3) FOLLOW_LOCATION отключите, чтобы иметь полный контроль за перемещениями 4) И теперь основная ошибка, почему вам возвращается 403 - передача двух кавычек в качестве $postfields заставляет курл отправлять данные с помощью POST запроса, даже несмотря на установку CURLOPT_POST в ноль - на это и жалуется твиттер. Чтобы этого избежать следует либо делать проверку на пустоту (правильный путь), либо поменять местами CURL_POST и CURL_POSTFIELDS, например так: PHP: curl_setopt($ct, CURLOPT_POSTFIELDS, $postfields ); curl_setopt($ct, CURLOPT_POST, $post);
Margin вы задаете неочевидные вопросы. Для того чтобы пользоваться твиттером обычному пользователю - обычно прокси не нужны. Если вы собираетесь спамить - то да, нужны. Для HTTPS требуются прокси поддерживающие метод CONNECT и/или Socks прокси