Добрый вечер форумчанам. пишу качалку с депозита на PHP. Все бы хорошо но не отдает оно требуемой страницы. Отдает вот это и все: Code: <form action="" onsubmit="check_recaptcha('fdbac57a443b3b5653fbbc4d8027e7d2', 'Please wait...'); return false;"> <div id=download_recaptcha></div> <input type=button value="Продолжить" class="continue" onclick="check_recaptcha('fdbac57a443b3b5653fbbc4d8027e7d2', 'Загрузка...'); return false;"> </form> <script language="javascript"> load_recaptcha(); </script> Вот мой скрипт: PHP: function PostCurl($url, $ref, $proxy=NULL, $cookfile){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLINFO_HEADER_OUT, 0); $headers = array ( 'User-Agent: Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.50', 'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1', 'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8', 'Accept-Encoding: gzip,deflate', 'Referer: '.$ref, 'Connection: keep-alive', 'Content-Type: application/x-www-form-urlencoded' ); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); curl_setopt($ch, CURLOPT_ENCODING,"gzip"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIESESSION, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, 'gateway_result=1'); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookfile); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookfile); if(!empty($proxy)){ curl_setopt($ch, CURLOPT_PROXY, $proxy); } curl_exec($ch); $page = curl_exec($ch); curl_close($ch); return $page; } function CURL_GET($url, $ref=NULL, $proxy=NULL, $cookfile){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLINFO_HEADER_OUT, 0); $headers = array ( 'User-Agent: Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.50', 'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1', 'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8', 'Accept-Encoding: gzip,deflate', 'Connection: keep-alive' ); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); if(!empty($ref)){ curl_setopt($ch, CURLOPT_REFERER, $ref); } curl_setopt($ch, CURLOPT_ENCODING,"gzip"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookfile); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookfile); $content = curl_exec($ch); curl_close($ch); return $content; } function CURL_GET_CAPTCHA($fid, $ref=NULL, $proxy=NULL, $cookfile){ $ch = curl_init("http://depositfiles.com/get_file.php?fid=".$fid); curl_setopt($ch, CURLOPT_URL, "http://depositfiles.com/get_file.php?fid=".$fid); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLINFO_HEADER_OUT, 1); $headers = array ( 'User-Agent: Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.50', 'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8', 'Accept-Encoding: gzip,deflate', 'Connection: keep-alive', 'X-Requested-With: XMLHttpRequest', 'Accept: */*' ); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); if(!empty($ref)){ curl_setopt($ch, CURLOPT_REFERER, $ref); } curl_setopt($ch, CURLOPT_ENCODING,"gzip"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookfile); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookfile); $content = curl_exec($ch); curl_close($ch); return $content; } function CURL_GET_CAPTCHA_CHALANGE($key, $proxy=NULL, $cookfile){ $ch = curl_init("http://www.google.com/recaptcha/api/challenge?k=".$key."&ajax=1&cachestop=0.12436250252327297"); curl_setopt($ch, CURLOPT_URL, "http://www.google.com/recaptcha/api/challenge?k=".$key."&ajax=1&cachestop=0.12436250252327297"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLINFO_HEADER_OUT, 1); $headers = array ( 'User-Agent: Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.50', 'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1', 'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8', 'Accept-Encoding: gzip,deflate', 'Connection: keep-alive' ); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); curl_setopt($ch, CURLOPT_ENCODING,"gzip"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookfile); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookfile); $content = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); return array('content'=>$content,'info'=>$info); } function CURL_GET_IMG_CAPTCHA($challenge, $ref=NULL, $proxy=NULL, $cookfile){ $ch = curl_init("http://www.google.com/recaptcha/api/image?c=".$challenge); curl_setopt($ch, CURLOPT_URL, "http://www.google.com/recaptcha/api/image?c=".$challenge); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLINFO_HEADER_OUT, 0); $headers = array ( 'User-Agent: Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.50', 'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1', 'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8', 'Accept-Encoding: gzip,deflate', 'Connection: keep-alive' ); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); if(!empty($ref)){ curl_setopt($ch, CURLOPT_REFERER, $ref); } curl_setopt($ch, CURLOPT_ENCODING,"gzip"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookfile); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookfile); $content = curl_exec($ch); curl_close($ch); return $content; } $cookfile = 'depositfiles.txt'; $url = "http://depositfiles.com/files/rwndmvuz8"; CURL_GET($url, '', '', $cookfile); $page = PostCurl($url, $url, '', $cookfile); //file_put_contents('post.html', $page, FILE_APPEND); preg_match('/<td class="repeat"><a href=\"(.*)\"/Usi', $page, $fid_math); if(!empty($fid_math[1])){ $fid = str_replace("&v=d", '', $fid_math[1]); $fid = str_replace("fid=", '', $fid); $fid = explode('?',$fid); $fid = $fid[1]; } //preg_match("/Recaptcha.create\('(.*)', this\);/Usi", $page, $key_math); unset($page); sleep(60); $page = CURL_GET_CAPTCHA($fid, "http://depositfiles.com/files/rwndmvuz8", '', $cookfile); //$key = $key_math[1]; $chal = CURL_GET_CAPTCHA_CHALANGE("6LdRTL8SAAAAAE9UOdWZ4d0Ky-aeA7XfSqyWDM2m", '', $cookfile); $chel = "03AHJ_VusSmTLvg19o-O45EnBQzZOG7IC6XnYj6t0rRLKtumOcohAGOjU7iUhiqpLHNslFfftV4FGcagZBNKjMFS4vI2XGbAg2wfXNCat21ZH5SEpZalj-JjMH_jMmL8fZv5ARXo4RViJxqyKOIr049JgCVVx3_jCCCA"; $page = CURL_GET_IMG_CAPTCHA($chel, "http://depositfiles.com/files/rwndmvuz8", '', $cookfile); //file_put_contents('capcha.jpg', $page, FILE_APPEND); sleep(rand(4,6)); $get_link = "http://depositfiles.com/get_file.php?fid=".$fid."&challenge=".$chel."&response=derlvea%20Champion"; $form = CURL_GET($get_link, "http://depositfiles.com/files/rwndmvuz8", '', $cookfile); file_put_contents('form.html', $form, FILE_APPEND); Скажите пожалуйста что не так делаю
Снифил. Все заголовки уже в курле. Вот может гугль прикрыл дырку? Вот вижу что для получения капчи в браузере происходит следующее: Отправляет Get запрос: Code: Данные запроса GET /get_file.php?fid=23ec9585575cda706d165c8c00b54d30 HTTP/1.1 User-Agent: Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.50 Host: depositfiles.com Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 Accept-Encoding: gzip, deflate Referer: http://depositfiles.com/files/rwndmvuz8 Cookie: v_auth=1326399292c83b7ac004b1bc06204415; uprand=815b80b29bdc2e334a657a0a4e4a23bd; last_file=rwndmvuz8 Cache-Control: no-cache Connection: Keep-Alive X-Requested-With: XMLHttpRequest Accept: */* Получет отыет сервера: Code: <form action="" onsubmit="check_recaptcha('23ec9585575cda706d165c8c00b54d30', 'Please wait...'); return false;"> <div id=download_recaptcha></div> <input type=button value="Продолжить" class="continue" onclick="check_recaptcha('23ec9585575cda706d165c8c00b54d30', 'Загрузка...'); return false;"> </form> <script language="javascript"> load_recaptcha(); </script> Потом начинает подгрузать капчу и в начале получает challenge: Отправляем: Code: Данные запроса GET /recaptcha/api/challenge?k=6LdRTL8SAAAAAE9UOdWZ4d0Ky-aeA7XfSqyWDM2m&ajax=1&cachestop=0.6896484030801974 HTTP/1.1 User-Agent: Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.50 Host: www.google.com Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 Accept-Encoding: gzip, deflate Referer: http://depositfiles.com/files/rwndmvuz8 Cache-Control: no-cache Connection: Keep-Alive Тело ответа: Code: var RecaptchaState = { site : '6LdRTL8SAAAAAE9UOdWZ4d0Ky-aeA7XfSqyWDM2m', challenge : '03AHJ_VuuaKGKgyzszEnV4pB1YPdi3ioQzSqVzQHQgc4bq2YfiPi0wcMeZBRBEyN3QJ-a6IdutQY0Em7ETVe_iHy5flxS_hnyRKofkVNOFjuYI440o-1MsJUhJ28OppTpBwW0aeav3DrANqzVvr1zh8bHQGoLxvUD37w', is_incorrect : false, programming_error : '', error_message : '', server : 'http://www.google.com/recaptcha/api/', timeout : 1800 }; Recaptcha.challenge_callback(); Ну собственно грузим картинку: Code: Данные запроса GET /recaptcha/api/image?c=03AHJ_VuuaKGKgyzszEnV4pB1YPdi3ioQzSqVzQHQgc4bq2YfiPi0wcMeZBRBEyN3QJ-a6IdutQY0Em7ETVe_iHy5flxS_hnyRKofkVNOFjuYI440o-1MsJUhJ28OppTpBwW0aeav3DrANqzVvr1zh8bHQGoLxvUD37w HTTP/1.1 User-Agent: Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.50 Host: www.google.com Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 Accept-Encoding: gzip, deflate Referer: http://depositfiles.com/files/rwndmvuz8 Cache-Control: no-cache Connection: Keep-Alive Сервер благополучно отдает картинку. Никаких куков на все этапах гуглу не посылается. Все это я спокойно могу проделать курлом. Потом ввозу капчу и серверу отправляется следующее: Code: Данные запроса GET /get_file.php?fid=23ec9585575cda706d165c8c00b54d30&challenge=03AHJ_Vuu3WA-lL3rycLRlhmpWI27ovBIZ7J6dhDJzZwZ-UzX3jVFfIs-_k3mmHDn1jGlz7-3enKJDWNvjGwJdoeXN_zF7bdCI24pUTHsJVihpMgjmAtwVDcl3mP2P23QBwa5oscicEAKi7KIH-WSqeolgUXSLpcyY4sAIizRWtHuH2yiOdCbIvJQ&response=siventi%20re-enlisted, HTTP/1.1 User-Agent: Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.50 Host: depositfiles.com Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 Accept-Encoding: gzip, deflate Referer: http://depositfiles.com/files/rwndmvuz8 Cookie: v_auth=1326399292c83b7ac004b1bc06204415; uprand=815b80b29bdc2e334a657a0a4e4a23bd; last_file=rwndmvuz8 Cache-Control: no-cache Connection: Keep-Alive X-Requested-With: XMLHttpRequest Accept: */* И в результате сервер отдает то что и требуется Code: <form action="http://fileshare501.depositfiles.com/auth-1326399293b69ae7bd680515497c2da1-178.93.96.4-853062084-96455315-guest/FS501-2/file4" method="get" onSubmit="download_started();show_begin_popup(0);"> <input class="download" value="Скачать файл" type="submit"/> </form> Делаю тоже самое курлом и в результате получаю то с чего начинал. То есть форму с кнопкой продолжить и скриптом загрузки формы капчи.
сейчас пользуюсь встроенными инструментами новой оперы. К сожалению Firefox не стает так как работаю с под линукса и без винчестера. я уже все перепробывал. Такую страницу по идее оно отдаёт в случаи не правильно введенных символов. Думал на форуме кто то с этим уже стыкался
и в связи с тем что там используется Javasript пробывал осуществлять подмену прямо в браузере. Дописывал в исходный код странички загруженной браузером свою функцию и перехватывал ответ сервера, когда капча введена правильно сервер возвращал все как положено. Если второй раз нажать на кнопку то уже возвращается функция загрузки новой капчи, Строку load_ajax('/get_file.php?'+params, msg, 'check_recaptcha', 1); меняю на: PHP: jQuery.get('/get_file.php?'+params, function(data) { alert('Сервер ответил: ' + data); }); И после нажатия в браузере кнопки продолжить в алерте возвращается все как надо. То есть при проверка капчи серверу отправляются данные не через функцию депозита а через мою. ХМ. По идее если через менут 10-15 снова нажать на кнопку Продолжить то сервер опять вернет нужный код? Если конечно лавочку не прикрыли. Еще проверю строку адресса, ну параметры которые передаются. Их сдесь нужно Urlencod'ить или писать в исходник все как есть?
я в своих скриптах енкодил. попробуй пошагово работать. Выявить на каком шаге конкретно проблема, разбить его более мелкие шажки.
Вот в этом последнем параметре и кроется проблема get_file.php?fid=23ec9585575cda706d165c8c00b54d30&challenge=03AHJ_Vuu3WA-lL3rycLRlhmpWI27ovBIZ7J6dhDJzZwZ-UzX3jVFfIs-_k3mmHDn1jGlz7-3enKJDWNvjGwJdoeXN_zF7bdCI24pUTHsJVihpMgjmAtwVDcl3 mP2P23QBwa5oscicEAKi7KIH-WSqeolgUXSLpcyY4sAIizRWtHuH2yiOdCbIvJQ&response=siventi%20re-enlisted fid=23ec9585575cda706d165c8c00b54d30 - Идентификатов файла. Постоянно меняется и парсится из кода страницы. challenge=03AHJ_Vuu3WA-lL3rycLRlhmpWI27ovBIZ7J6dhDJzZwZ-UzX3jVFfIs-_k3mmHDn1jGlz7-3enKJDWNvjGwJdoeXN_zF7bdCI24pUTHsJVihpMgjmAtwVDcl3 mP2P23QBwa5oscicEAKi7KIH-WSqeolgUXSLpcyY4sAIizRWtHuH2yiOdCbIvJQ - challenge капчи, постоянно один и тоже. Ну как один, меняется конешно, выбирается из базы. response=siventi%20re-enlisted - ну это тоже понятно, ответ на капчу. Тоже берется из базы и разумеется привязан к challenge. Вопрос в том нужно ли его в JS енкодить или вставлять для теста вот так siventi re-enlisted В PHP перед курлом енкодю.
Вот только что посмотрел что передаетаяется аяксу для отправки PHP: fid=03e8ae86ae4ca03596e5f8d776dfcbee&challenge=03AHJ_VuubEKbHa2-49A1ihH2r4L9rsZqMv9T2Fzp2nGCubZ2uJHaeEPlBHiWeEYhp_UYxy8-4sM9N42iu13F2io8FXVjT6IxnzTwdCkMgQ5SusjZt4_4UTDZdkfbP035VGUSirfh7g0BxY0VPcU_aDQ9Fq-Y8XGECJQ&response=sugar ictize Тоесть не обработанное. Зделал я вот так: PHP: function check_recaptcha(fid, msg) { var params = 'fid='+fid+'&challenge='+Recaptcha.get_challenge()+'&response='+Recaptcha.get_response(); alert(params); jQuery.get('/get_file.php?'+params, function(data) { alert('Сервер ответил: ' + data); }); return ; $('#download_container').text(msg); } И север любезно отдает файл: PHP: Сервер ответил: <form action="http://fileshare501.depositfiles.com/auth-13264660392b23afe9e5a0b91a358c1f-178.93.166.109-855232212-96455315-guest/FS501-2/file4" method="get" onSubmit="download_started();show_begin_popup(0);"> <input class="download" value="Скачать файл" type="submit"/> </form> Блин
завтра поточнее посмотрю, но мне кажется в печеньках дело или реферах, потому как если ты вручную передаешь значения и все норм...
Нет. как раз когда в я значение уже передаю через подмену в опере перемнной params то тоже все плохо, ну то есть разгаданную капчу оно принимать отказывается. а когда серверу отправляется та что вводится вручную с крартинки то тогда все проходит. Вот попробуй заменить в исходнике загруженой страницы функцию check_recaptcha на эту и увидишь. Когда загрузится капча введи текст и увидишь что вернет алерт. Он возвращает переменную params, которая не енкодится. Когда туда сразу записываю готовое значение розгаданой капчи тоесть подмена прямо в функции challenge и response то оно далеко посылает. PHP: function check_recaptcha(fid, msg) { var params = 'fid='+fid+'&challenge='+Recaptcha.get_challenge()+'&response='+Recaptcha.get_response(); alert(params); jQuery.get('/get_file.php?'+params, function(data) { alert('Сервер ответил: ' + data); }); return ; $('#download_container').text(msg); } Уже не знаю что делать