Получить изображение capctha с помощью PHP CURL-запроса и опубликовать некоторые данные обратно - PullRequest
0 голосов
/ 27 мая 2019

Мне нужно получить изображение капчи, показать ее на странице и отправить запрос на эту капчу обратно на ту же страницу.

Я пробовал код с сохранением файлов cookie, но это не работает.

    // Referer value for login request
    $indexreferer = "https://dichiarazioneprecompilata.agenziaentrate.gov.it/index.htm?v=20190502";
    $captchareferer = "https://telematici.agenziaentrate.gov.it/VerificaCF/VerificaCf.do";

    // Note that __DIR__ can also be used in PHP 5.3+
    $cookieJar = dirname(__FILE__) . '/cookie.txt';

    // The User-Agent string to send
    $userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5";

    $ch = curl_init('https://telematici.agenziaentrate.gov.it/VerificaCF/VerificaCf.do');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

    // Set header-related options
    curl_setopt($ch, CURLOPT_REFERER, $indexreferer);
    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieJar);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieJar);

    $result = curl_exec($ch);

    //getcaptcha($cookies['JSESSIONID']);
    echo $cookieJar;
    getcaptcha();
    function getcaptcha()
    {
        global $cookieJar;
        global $captchareferer;
        global $userAgent;
        // Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, 'https://telematici.agenziaentrate.gov.it/VerificaCF/captcha?type=i');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

    // Set header-related options
    curl_setopt($ch, CURLOPT_REFERER, $captchareferer);
    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieJar);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieJar);

        $result = curl_exec($ch);
        if (curl_errno($ch)) {
            echo 'Error:' . curl_error($ch);
        }
        curl_close ($ch);
        file_put_contents('./logo.jpg',$result);
    }

    if(isset($_POST['submit']))
    {
// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://telematici.agenziaentrate.gov.it/VerificaCF/VerificaCf.do');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "cf=55555&inCaptchaChars=".$_POST['code']."");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

    // Set header-related options
    curl_setopt($ch, CURLOPT_REFERER, $captchareferer);
    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieJar);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieJar);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
echo $result;
    }

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

enter image description here

, но это показывает, что капча неверна:

enter image description here

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

...