cookies - 如何在我的站点中嵌入来自另一个站点的验证码,手动解决它,发送回原始站点并获取令牌?
问题描述
目的不是自动解析 CAPTCHA。我网站的每个用户都必须解析验证码。
目的是使用来自其他站点的免费数据。这些数据是公开且免费的,但为了避免大量请求,它们受到 CAPTCHA 的保护。
这是我已经完成但不起作用的:
创建一个 proxy.php 来管理请求并将其转发到原始站点。
复制原始请求(验证码请求)中的所有标头并将它们添加到代理。因此,这是解决 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>
- 单击按钮时,发送输入文本并检查是否已解决:
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
然后您可以在请求 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']);
}
推荐阅读
- apache-kafka - 如何在 ConsumerGroup 中设置 Zookeeper IP 地址而不是 Kafka-Host IP 地址?
- mysql - 如何从 Arduino 连接到数据库?
- elasticsearch - ElasticSearch 聚合优于聚合
- php - php多维数组通过多个键和值搜索
- salesforce - 字段更改时将附件从父对象复制到子对象
- java - 将 curl 命令转换为 RestTemplate
- c# - 我应该假设发件人可以为空吗?
- java - Bazel:如何构建使用 JNI 的 C++ 应用程序?
- android - Gradle 在运行 Android 检测时忽略 testProguardFile
- vue.js - 自定义组件上的vuejs中的单击事件?