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

由于某个网站的文件有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

阅读 6.8k
1 个回答

隔了快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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题