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

How can I embed in my site a CAPTCHA from another site, resolve it MANUALLY, send back to the original site and get the TOKEN?

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

目的是使用其他站点的免费数据。这些数据是 public 且免费的,但为了避免大量请求,它们受到验证码的保护。

这是我所做的但不起作用:

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

  2. 从原始请求(验证码的请求)中复制所有headers并将它们添加到代理中。所以,这是解析验证码的形式:

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 过滤器来做到这一点?

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

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

然后你可以在请求验证码图像后读取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']);    
}