脚本很简单,就是为豆列中的条目添加了一个「看过」按钮,点击按钮的响应逻辑如下(是从手动操作的请求 copy 出来的 fetch ,其中 id 是动态获取的条目 id ,body 中的 ck 字段我看下其他手动操作的请求,ck 都是固定的值),但该请求却失败了 Fetch API cannot load https://movie.douban.com/j/subject/xxx/interest due to access control checks.
这个请求是从浏览器发出的,应该是可以绕过任何检查吧,是我遗漏了什么吗?感谢指点 🙏
function handleSeen(id) {
fetch("https://movie.douban.com/j/subject/" + id + "/interest", {
"body": "ck=hC6f&interest=collect&rating=&foldcollect=F&tags=&comment=",
"cache": "default",
"credentials": "include",
"headers": {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "en-US,en;q=0.9",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15",
"X-Requested-With": "XMLHttpRequest"
},
"method": "POST",
"mode": "cors",
"redirect": "follow",
"referrer": "https://movie.douban.com/subject/" + id + "/",
"referrerPolicy": "unsafe-url"
})
}
1
Rache1 2022-12-21 13:27:41 +08:00
贴完整的报错信息,油猴有内置提供了 GM_xmlhttpRequest 方法,可以发起跨域请求。
|
2
gap OP @Rache1
就这三条报错信息,请求是从豆瓣页面上发起的,请问也需要跨域吗?目前我直接用的 fetch [Error] Preflight response is not successful. Status code: 403 [Error] Fetch API cannot load https://movie.douban.com/j/subject/30426519/interest due to access control checks. [Error] Failed to load resource: Preflight response is not successful. Status code: 403 (interest, line 0) |
3
ljsh093 2022-12-21 14:10:06 +08:00 via iPhone
F12 里的网络请求对比下手动操作和脚本操作的参数是否一致呢?
|
4
Rache1 2022-12-21 14:17:05 +08:00
|
6
ysc3839 2022-12-21 14:31:55 +08:00
用户脚本中调用标准的 fetch 或 xhr 都不能绕过检查,要绕过检查需要使用 GM_xmlhttpRequest
|
8
InDom 2022-12-21 14:59:57 +08:00 1
你在 www. 下执行 movie. 域的请求, 显然是跨域了, 获取到 cookies 以后用 GM_ 发吧.
除了 ck 之外几乎没有任何检查. 最小 curl 命令如下 curl 'https://movie.douban.com/j/subject/****/interest' -H 'Cookie: dbcl2="****"; ck=****;' --data 'ck=****&interest=collect' |
10
gap OP 同时谢谢大家的建议,学习到了 GM_xmlhttpRequest
|