2012-05-20 2 views
2

Я пытаюсь автоматизировать процесс входа на защищенную страницу. Я использую Death By Captcha для перевода изображения в текст, и, похоже, он работает хорошо. Я использую завиток, чтобы загрузить страницу входа, получить URL-адрес изображения captcha, отправить его в DBC, вернуть текст и отправить запрос POST на страницу входа с текстом captcha.Обход Captcha с curl в PHP

Проблема, с которой я столкнулась, заключается в том, что изображение captcha меняется, когда я отправляю запрос на отправку. Поскольку я не получаю такое же поведение при перезагрузке/или неправильном отправке формы через браузер (я получаю одно и то же изображение снова и снова), я предполагаю, что проблема связана с файлами cookie или чем-то еще, что я отсутствует, что относится к сеансу.

Это код, который я использую, чтобы получить данные и отправить форму:

$ch = curl_init(); 
// Not sure that I need it, just make sure that the session doesn't change... 
curl_setopt($ch, CURLOPT_COOKIESESSION, false); 
curl_setopt($ch, CURLOPT_URL, $loginUrl); 
// It seems that PHPSESSID cookie parameter might be the parameter that keep the image the same, but it didn't work. I even read it dynamically from the cookie file but it still didn't work 
//curl_setopt($ch, CURLOPT_COOKIE, "PHPSESSID=2bp3nhkp3bgftfrr1rjekg03o2"); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieName); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieName); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_REFERER, $loginUrl); 
$result = curl_exec($ch); 

// Resolve the captcha and append it to the post parameters 
$captchaText = $this->resolveCaptcha($result); 
$postData .= '&LoginForm%5BverifyCode%5D='.$captchaText; 

// Resubmit the form with the updated form data 
curl_setopt($ch, CURLOPT_REFERER, $loginUrl);   
curl_setopt($ch, CURLOPT_URL, $loginUrl); 
curl_setopt ($ch, CURLOPT_POST, 1); //FIXED 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postData);   
$result = curl_exec($ch); 

При печати на конечный результат, я могу видеть, что текст CAPTCHA, был успешно отправлен, но что само изображение имеет изменено ...

Я также прикрепляю скриншот параметров запроса, снятых с помощью Tamper, в стандартной сессии Firefox (так что кто-то может заметить, что я что-то пропустил).

Browser request parameters

РНР/локон представить код полностью работает для сайтов на основе не-CAPTCHA, поэтому представление параметров POST, кажется, работает.

Возможно, что я пропустил что-то очень основное здесь, любая помощь будет высоко оценена.

Я также посмотрел на эти сообщения, но не смог найти ответ, который я ищу.

How CURL Login with Captcha and Session

How to retrieve captcha and save session with PHP cURL?

https://stackoverflow.com/questions/8633282/curl-to-download-a-captcha-and-submit-it

+1

Конечно, использование captcha заключается в том, чтобы остановить вас именно так ... если автор сайта захотел получить доступ к странице с помощью завитка, он бы не реализовал капчу в первую очередь –

+1

И по этой причине , вам решать эту проблему. В то время как вопрос программирования, SO не для того, чтобы помочь с озорством. – mario

+0

Спасибо, ребята. Это все еще простой вопрос о том, как поддерживать сеанс в такте при передаче файлов cookie. В этом конкретном случае я пытаюсь получить информацию о партнерстве из нескольких источников. Однако, если вам будет неудобно помогать, я уважаю ваше мнение. – sagibb

ответ

3

вы используете

curl_setopt ($ch, CURLOPT_POST, 0); 

во втором curl_exec. shoudn't it

curl_setopt ($ch, CURLOPT_POST, 1); 

?

+0

Спасибо! Да ты прав. На самом деле я не совсем уверен, как работает работа с параметрами POST, но это произошло (я увидел, что форма была заполнена вторым ответом). Я исправил эту проблему, но это не решило проблему ... – sagibb

Смежные вопросы