Chrome扩展的 chrome.downloads.download API 可否修改referer

发布于 2022-09-05 22:56:49 字数 896 浏览 16 评论 0

由于某个网站的文件有referer防盗链设置,所以我想在下载时修改referer信息。

普通的下载代码:

chrome.downloads.download({
    url: url,
    filename: fileName,
    conflictAction: 'uniquify',
    saveAs: false
});

我尝试了chrome.webRequest.onBeforeSendHeaders.addListener() 来修改web请求的referer,但是这个方法似乎不会对 chrome.downloads.download 生效。

而 chrome.downloads.download 自身似乎又不允许修改referer。那么还有没有办法达到我的目的呢?

(因为我是新手,所以用了很多“似乎”,请见谅)

ps:我找到了stackoverflow上的一个讨论:

send referrer header with chrome.downloads api

答主说是在新标签页打开图像然后将图像加载到canvas里。

其实我感觉stackoverflow上的这个办法有情景限制,因为图片是存在referer限制的,而那个题主的问题是在图片上点击下载,此时图片已经在网页上加载了,所以可以在新标签页打开。但我的使用情景里不会把所有图片都在网页上加载,而是根据url直接下载,所以我应该也不能在新标签页里打开图片,也就没办法继续操作了。

如果非要这么做,那么我先把图片在源网页里加载一遍,然后再顺着这个答主的思路进行操作,也许会有一定的可能性顺利执行。只是这样更加繁琐了,我做这个扩展的意义也就不存在了 TAT

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月朦胧 2022-09-12 22:56:49

隔了快10个月,我又开始研究这个问题,发现 chrome 是可以修改 referer的,不过不是在 download 里面设置。

类似这样:

chrome.webRequest.onBeforeSendHeaders.addListener(function (details) {
    for (var i = 0; i < details.requestHeaders.length; ++i) {
        if (details.requestHeaders[i].name === 'Referer') {
            details.requestHeaders[i].value = 'https://www.pixiv.net';
            break;
        }
    }
    return {
        requestHeaders: details.requestHeaders
    };
}, {
    urls: ['*://*.pixiv.net/*']
}, ['blocking', 'requestHeaders']);

此外,需要在清单文件里加入权限:

"webRequest", "webRequestBlocking","你发起请求的网址","你要跨域请求的网址"

详见:
https://saber.love/?p=4410

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文