首页 > 解决方案 > 如何在我的站点中嵌入来自另一个站点的验证码,手动解决它,发送回原始站点并获取令牌?

问题描述

目的不是自动解析 CAPTCHA。我网站的每个用户都必须解析验证码。

目的是使用来自其他站点的免费数据。这些数据是公开且免费的,但为了避免大量请求,它们受到 CAPTCHA 的保护。

这是我已经完成但不起作用的:

  1. 创建一个 proxy.php 来管理请求并将其转发到原始站点。

  2. 复制原始请求(验证码请求)中的所有标头并将它们添加到代理。因此,这是解决 CAPTCHA 的表格:

xxx 是我的站点,example.com 是我要解析验证码并获取数据的站点:

<img id="imgCaptcha" src="https://xxx/proxy.php?curl=https://example.com/Captcha&type=image&lang=it" style="width:200px;">

<input type="text" id="captcha">

<button type="button" id="btn_resolve">Resolve</button>
  1. 单击按钮时,发送输入文本并检查是否已解决:

xxx 是我的站点,example.com 是我要解析验证码并获取数据的站点:

    $('#btn_resolve').on('click',function(e) {
       e.preventDefault();
       var captcha = $('#captcha').val();

       $.get('https://xxx/proxy.php?https://example.com/Captcha&type=check&captcha='+captcha, function(data, status) {
          alert(JSON.stringify(data));
       });
   });

结果总是{"result":false,"token":"","message":null}

我认为问题出在我在 proxy.php 中设置的 JSESSIONID cookie 上,但似乎出于以下动机从 Chrome 中过滤掉了:“这个 cookie 被阻止,因为它的路径与请求 url 路径的路径不完全匹配或超级目录”。

老实说,我不清楚我是否可以做到这一点以及如何做到这一点:似乎最新版本的 Chrome 阻止了一些 coockies。如何使用 PHP CURL 绕过 Chrome 过滤器来做到这一点?

标签: cookiescross-domaincaptcha

解决方案


我解决了它在 proxy.php 文件中添加所有需要的 cookie。

Proxy.php 使用 curl 转发请求。这是 PHP 中使用 CURL 命令的跨域代理的一个很好的起点 PHP CORS Proxy by softius

然后您可以在请求 CAPTCHA 图像后读取 JSESSIONID,并将其转发到代理并将其和其他人添加到请求中:

header('Set-Cookie: cross-site-cookie=name; SameSite=None; Secure');
header('Set-Cookie: XSRF-TOKEN=XXXXX');
if (isset($_REQUEST['jsessionid'])) {
    setcookie("JSESSIONID", NULL, 0, "/");
    header('Set-Cookie: JSESSIONID='.$_REQUEST['jsessionid']);    
} 

推荐阅读