Подтвердить что ты не робот

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

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

function getUrl($url, $method='', $vars='', $open=false) {
    $agents = 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16';
    $header_array = array(
        "Via: 1.1 register.pandi.or.id",
        "Keep-Alive: timeout=15,max=100",
    );
    static $cookie = false;
    if (!$cookie) {
        $cookie = session_name() . '=' . time();
    }
    $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, $agents);
    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($ch);
        die;
    }
    curl_close($ch);
    return $buffer;
}

function save_captcha($ch) {
    $agents = 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16';
    $url = "https://register.pandi.or.id/jcaptcha";
    static $cookie = false;
    if (!$cookie) {
        $cookie = session_name() . '=' . time();
    }
    $ch = curl_init();    // Initialize a CURL session.
    curl_setopt($ch, CURLOPT_URL, $url);  // Pass URL as parameter.
    curl_setopt($ch, CURLOPT_USERAGENT, $agents);
    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);  // Return stream contents.
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // We'll be returning this
    $data = curl_exec($ch);  // // Grab the jpg and save the contents in the
    curl_close($ch);  // close curl resource, and free up system resources.
    $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'] . "press=login";
    $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 fail to read";
        chmod('../pandi/', '777');
    }
}

this cookie.txt

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

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

после того, как я отправлю форму только для отображения

HTTP/1.1 200 OK Date: Wed, 27 Apr 2011 07:38:08 GMT Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.4; Tomcat-5.0.28/JBoss-4.0.0 (build: CVSTag=JBoss_4_0_0 date=200409200418) Content-Length: 0 Via: 1.1 register.pandi.or.id Content-Type: text/plain X-Pad: avoid browser bug

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

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