Отправлять запросы в несколько форм на разных сайтах, которые имеют Captcha

0

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

Изображение 174551

Проблема стала сложной, потому что мне нужно сохранить идентификатор сеанса и файлы cookie, потому что, если я отправлю форму, которую должны знать другие сайты, это тот же самый пользователь, который получил запрос на капчу. PHP-скрипт, который я использовал для получения catpcha:

$ch = curl_init($url);//Site url
curl_setopt($ch, CURLOPT_COOKIEJAR, $file); //Save the cookie to a temporary file on the server
curl_setopt($ch, CURLOPT_COOKIEFILE, $file); 
curl_setopt($ch, CURLOPT_HEADER  ,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$content = curl_exec($ch);

preg_match("'<div class=\"captchaimage\">(.*?)<a class=\"captcha-refresh-link hide\"'si", $content, $matches ); // getting the captcha image

echo $matches[1]; //Displaying the image

В первый раз, когда я использую этот код, он показывает сломанное изображение:

Изображение 174551

Когда я обновляю страницу или открываю в другой вкладке сайт, на который я запрашиваю captcha, он показывает запрошенный код:

Изображение 174551

Так что мне нужна помощь, потому что я не много работал с curl и cookies, но я знаю, что проблема имеет такое решение, как этот сайт https://www.betall.ie/register.html. Я был бы признателен за помощь :).

Код php находится здесь: http://codepad.viper-7.com/FMKrGR

Теги:
curl
cookies
cross-browser
captcha

2 ответа

0
Лучший ответ

Нашел решение для получения кода с другого сайта:

function getCaptcha($file){
   header ('Content-Type: image/png');
   $ch = curl_init($url);
   curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2');
   curl_setopt($ch, CURLOPT_COOKIEJAR, $file);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_HEADER, 1);
   $out['result']  = curl_exec($ch);  //getting the html of the page 
   $out['error']   = curl_error($ch);
   $out['info']    = curl_getinfo($ch);
   curl_close($ch);  

   $matches = array();
   preg_match("'<div class=\"captchaimage\">(.*?)<a class=\"captcha-refresh-link hide\"'si", $out['result'], $matches );
   if(!isset($matches[1])){
      getCaptcha($file);
      return;
   }
   $img = $matches[1];
   $src = strpos($img, 'src="') + 5;
   $srcend = strpos($img, '"', $src);
   $img_src ='https://www.example.com' .  substr($img, $src, $srcend - $src);
   $img = substr($img, 0, $src)  . 'https://www.example.com' . substr($img, $src); //Getting the image captcha via regex

   $ch = curl_init($img_src);
   curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2');
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_COOKIEFILE, $file);
   $out2['result'] = curl_exec($ch);
   $out2['error']  = curl_error($ch);
   $out2['info']   = curl_getinfo($ch);
   curl_close($ch); //requesting the image via curl

   return $out2['result']; //returning the image
}
1

curl_setopt($ch, CURLOPT_COOKIEJAR, $file);

Можете ли вы использовать разные файлы cookie для разных $ url? Я думаю, это может помочь. Элементы cookie из разных URL-адресов не будут смешиваться.

  • 0
    Я не понимаю вашу идею, что мне делать на самом деле. Должен ли я изменить URL-адрес $ file в опции CURLOPT_COOKIEJAR?
  • 0
    @AntonioPapa Да, используйте отдельный файл cookie для каждого веб-сайта, к которому вы подключаетесь.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню