其意图不是自动解决验证码问题。我网站的每个用户都必须解析CAPTCHA。
其意图是使用来自另一个站点的免费数据。这些数据是公开的和免费的,但是为了避免大量的请求,它们受到CAPTCHA的保护。
这就是我做过但不起作用的事情:
xxx是我的站点,example.com是我想解析captcha并获取数据的站点:
<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>xxx是我的站点,example.com是我想解析captcha并获取数据的站点:
$('#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,但似乎是出于这个动机从Chrome过滤出来的:“这个cookie被阻塞了,因为它的路径与请求url的路径不完全匹配或者是一个超级目录”。
老实说,我不清楚我是否能做到这一点,以及如何做到这一点:似乎最后版本的Chrome屏蔽了一些coockies。我怎样才能绕过Chrome过滤器使用PHP CURL来完成这个任务呢?
发布于 2021-08-03 10:16:43
我解析了它,在proxy.php文件中添加了所有需要的cookie。
Proxy.php使用curl转发请求。对于使用CURL命令softius代理PHP CORS的跨域代理来说,这是一个很好的起点。
然后,您可以在请求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']);
} https://stackoverflow.com/questions/68482831
复制相似问题