Как CURL Войти с Captcha и Session

 define ('COOKIE', './cookie.txt');
 define ('MYURL', 'https://register.pandi.or.id/main');

 функция getUrl ($ url, $ method = '', $ vars = '', $ open = false) {
     $ agents = 'Mozilla / 5.0 (X11; U; Linux i686; ru-US) AppleWebKit / 534.16 (KHTML, как и Gecko) Chrome / 10.0.648.204 Safari / 534.16';
     $ header_array = array (
         «Через: 1.1 register.pandi.or.id»,
         «Keep-Alive: timeout = 15, max = 100»,
     );
     static $ cookie = false;
     if (! $ cookie) {
         $ cookie = session_name ().  знак равно  время();
     }
     $ referer = 'https://register.pandi.or.id/main';
     $ ch = curl_init ();
     if ($ method == 'post') {
         curl_setopt ($ ch, CURLOPT_POST, 1);
         curl_setopt ($ ch, CURLOPT_POSTFIELDS, "$ vars");
     }
     curl_setopt ($ ch, CURLOPT_HEADER, 1);
     curl_setopt ($ ch, CURLOPT_URL, $ url);
     curl_setopt ($ ch, CURLOPT_HTTPHEADER, $ header_array);
     curl_setopt ($ ch, CURLOPT_USERAGENT, $ агенты);
     curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, 5);
     curl_setopt ($ ch, CURLOPT_MAXREDIRS, 10);
     curl_setopt ($ ch, CURLOPT_REFERER, $ referer);
     curl_setopt ($ ch, CURLOPT_COOKIE, $ cookie);
     curl_setopt ($ ch, CURLOPT_COOKIEJAR, COOKIE);
     curl_setopt ($ ch, CURLOPT_COOKIEFILE, COOKIE);
     curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false);
     curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, 2);

     $ buffer = curl_exec ($ ch);
     if (curl_errno ($ ch)) {
         echo "error".  curl_error ($ ч);
         умереть;
     }
     curl_close ($ ч);
     return $ buffer;
 }

 Функция save_captcha ($ ch) {
     $ agents = 'Mozilla / 5.0 (X11; U; Linux i686; ru-US) AppleWebKit / 534.16 (KHTML, как и Gecko) Chrome / 10.0.648.204 Safari / 534.16';
     $ url = "https://register.pandi.or.id/jcaptcha";
     static $ cookie = false;
     if (! $ cookie) {
         $ cookie = session_name ().  знак равно  время();
     }
     $ ch = curl_init ();  // Инициализировать сеанс CURL.
     curl_setopt ($ ch, CURLOPT_URL, $ url);  // Передать URL как параметр.
     curl_setopt ($ ch, CURLOPT_USERAGENT, $ агенты);
     curl_setopt ($ ch, CURLOPT_COOKIESESSION, true);
     curl_setopt ($ ch, CURLOPT_COOKIE, $ cookie);
     curl_setopt ($ ch, CURLOPT_COOKIEJAR, COOKIE);
     curl_setopt ($ ch, CURLOPT_COOKIEFILE, COOKIE);
     curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);  // Возвращаем содержимое потока.
     curl_setopt ($ ch, CURLOPT_BINARYTRANSFER, 1);  // Мы будем возвращать это
     $ data = curl_exec ($ ch);  // // Возьмите jpg и сохраните содержимое в
     curl_close ($ ч);  // закрываем ресурс curl и освобождаем системные ресурсы.
     $ captcha_tmpfile = './captcha/captcha-'.  rand (1000, 10000).  '.jpg';
     $ fp = fopen ($ tmpdir. $ captcha_tmpfile, 'w');
     fwrite ($ fp, $ data);
     fclose ($ FP);
     return $ captcha_tmpfile;
 }

 if (isset ($ _ POST ['captcha'])) {
     $ id = "yudohartono";
     $ pw = "mypassword";
     $ postfields = "navigation = authenticate & login-type = registrant & username =".  $ id.  "& password =".  $ pw.  "& captcha_response =".  $ _POST ['captcha'].  «Нажмите = логин»;
     $ url = "https://register.pandi.or.id/main";
     $ result = getUrl ($ url, 'post', $ postfields);
     echo $ result;
 } else {

     $ open = getUrl ('https://register.pandi.or.id/main', '', '', true);
     $ captcha = save_captcha ($ ch);
     $ fp = fopen ($ tmpdir. "/cookie12.txt", 'r');
     $ a = fread ($ fp, filesize ($ tmpdir. "/cookie12.txt"));
     fclose ($ FP);
<form action='' method='POST'> <img src='<?php echo $captcha ?>' /> <input type='text' name='captcha' value=''> <input type='submit' value='proses'> </form>"; 
     if (! is_readable ('cookie.txt') &&! is_writable ('cookie.txt')) {
         echo "cookie не читается";
         chmod ('../ pandi /', '777');
     }
 }

этот файл cookie.txt

 # Netscape HTTP Cookie File
 # http://curl.haxx.se/rfc/cookie_spec.html
 # Этот файл был создан libcurl!  Редактируйте на свой страх и риск.

 register.pandi.or.id FALSE / FALSE 0 JSESSIONID 05CA8241C5B76F70F364CA244E4D1DF4

после отправки формы

 HTTP / 1.1 200 OK Дата: Ср, 27 апр 2011 07:38:08 GMT Сервер: Apache-Coyote / 1.1 X-Powered-By: Servlet 2.4;  Tomcat-5.0.28 / JBoss-4.0.0 (сборка: CVSTag = JBoss_4_0_0 date = 200409200418) Content-Length: 0 Через: 1.1 register.pandi.or.id Content-Type: text / plain X-Pad: избегать ошибки браузера

если не ошибка «Captcha invalid» всегда не удалось войти в pandi, что неправильно в моем скрипте?
Я не хочу разорвать Captcha, но я хочу, чтобы на вашем веб-странице отображался captcha и пользовательский вводный код, поэтому пользователь может регистрировать домен dotID с моего веб-автомата

Solutions Collecting From Web of "Как CURL Войти с Captcha и Session"

Капча предназначена для разграничения между людьми и роботами (программами). Похоже, вы пытаетесь войти в систему с программой. Кажется, что капча делает свою работу :).

Я не вижу законного пути.

Это происходит потому,
Вы взяли свой образ captcha с первого getURL (ie first curl_exec) и обработали getURL (ie first curl_exec) но для отправки вашего captcha вам getURL (ie again curl_exec) что означает новую страницу с новой перекодировкой.

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

Captcha – это динамическое изображение, созданное сервером при попадании на страницу. Он будет меняться, вы должны извлечь капчу со страницы, а затем проанализировать ее, а затем отправить свою страницу для входа. Captcha будет продолжать меняться, когда и когда страница запускается для загрузки!

Использование безгласного браузера это возможно. т.е.: zombie.js coffee.js на узле. Также может быть возможно извлечь «изображение» из капчей и, используя распознавание изображений, «прочитать» изображение и преобразовать его в текст, который затем отправляется с формой ,

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

Да, Андре Сельва прав. По второму запросу он дает новый captcha. Как только он загружает captcha с помощью функции getUrl, а второй загружается из функции save_captcha, так это два разных изображения.

Он должен сделать что-то вроде этого: Загрузите изображение captcha перед тем, как закрыть завиток и перед публикацией, и скажите сценарию ждать, пока вы не предоставите ответ с подсказкой – я буду использовать preg_match. Для этого потребуется некоторый javascript.

Если изображение captcha создается из javascript, вам нужно выполнить этот javascript с тем же файлом cookie или токеном. В этой ситуации более простым решением является запись заголовков с помощью addon для html-приложений для mozila ffox.

С PHP я не знаю, как это сделать, вам нужно получить капчу и найти способ его решить. У этого есть много алгоритмов, чтобы сделать это для Вас, но если вы хотите использовать java, я уже взломал исходный код из этой ссылки, чтобы получить код для решения captcha, и он отлично работает для многих систем captcha.

Таким образом, вы можете попытаться реализовать свой собственный решатель, который займет много времени, попытайтесь найти существующую реализацию для PHP или, ИМХО, лучший вариант, использовать базу кода JDownloader.