我在Developer's Guide中看不到这个问题的答案,尽管可能我找的地方不对。我想使用Chrome扩展拦截HTTP请求,然后转发它,可能会使用新的/不同的HTTP头-我该如何做到这一点?
icomxhvb1#
PS:我是Requestly的作者,所以你可以为任何你不喜欢的事情责怪我:)
当OP提出这个问题的时候,这当然是不可能的,但是不久之后Chrome发布了一个实验性的WebRequest API。但是现在它们已经被正式包含在Chrome扩展中。你可以用它来修改Chrome中的请求和响应头。
chrome.webRequest.onBeforeSendHeaders.addListener( function(details) { for (var i = 0; i < details.requestHeaders.length; ++i) { if (details.requestHeaders[i].name === 'User-Agent') { details.requestHeaders.splice(i, 1); break; } } return { requestHeaders: details.requestHeaders }; }, {urls: ['<all_urls>']}, ['blocking', 'requestHeaders' /* , 'extraHeaders' */] // uncomment 'extraHeaders' above in case of special headers since Chrome 72 // see https://developer.chrome.com/extensions/webRequest#life_cycle_footnote );
Google Chrome将在Manifest V3中弃用webRequest Blocking API。根据Google于2022年9月28日发布的official statement,所有带有Manifest v2的扩展从2023年6月起将无法在Chrome上运行。以下是使用Manifest v3 -https://github.com/requestly/modify-headers-manifest-v3修改请求和响应头的方法
const allResourceTypes = Object.values(chrome.declarativeNetRequest.ResourceType); export default [ { id: 1, priority: 1, action: { type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS, requestHeaders: [ { operation: chrome.declarativeNetRequest.HeaderOperation.SET, header: 'x-test-request-header', value: 'test-value', }, ] }, condition: { urlFilter: '/returnHeaders', resourceTypes: allResourceTypes, } }, { id: 2, priority: 1, action: { type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS, responseHeaders: [ { operation: chrome.declarativeNetRequest.HeaderOperation.SET, header: 'x-test-response-header', value: 'test-value', }, ] }, condition: { urlFilter: 'https://testheaders.com/exampleAPI', resourceTypes: allResourceTypes, } }, ];
import rules from './rules'; chrome.declarativeNetRequest.updateDynamicRules({ removeRuleIds: rules.map((rule) => rule.id), // remove existing rules addRules: rules });
完整的源代码可以在GitHub repo -https://github.com/requestly/modify-headers-manifest-v3中找到如果你想使用Chrome/Firefox扩展,你可以使用Requestly,它允许你根据需要修改请求和响应头。
zbsbpyhn2#
chrome 17支持修改请求标头(https://developer.chrome.com/extensions/webRequest)。
xnifntxz3#
您找对了地方,但是拦截HTTP请求还不存在,但是扩展团队知道这是一个流行的请求,并且希望在不久的将来得到它。
euoag5mw4#
请记住,从chrome 72开始,除非您在opt_extraInfoSpec中添加了extraHeaders,否则不允许使用某些头文件。因此,@sachinjain024的答案中的上述示例将类似于:
opt_extraInfoSpec
extraHeaders
chrome.webRequest.onBeforeSendHeaders.addListener( function(details) { for (var i = 0; i < details.requestHeaders.length; ++i) { if (details.requestHeaders[i].name === 'User-Agent') { details.requestHeaders.splice(i, 1); break; } } return { requestHeaders: details.requestHeaders }; }, {urls: ['<all_urls>']}, [ 'blocking', 'requestHeaders', 'extraHeaders'] );
有关详细信息,请查看文档Screenshot from the documentation https://developer.chrome.com/extensions/webRequest#life_cycle_footnote
3j86kqsm5#
您可以安装ModHeader扩展并添加头文件:
fjnneemd6#
对于使用manifest版本3的扩展,不能再使用chrome.webRequest.onBeforeSendHeaders.*。替代项是chrome.declarativeNetRequest在manifest.json中进行以下更改:
chrome.webRequest.onBeforeSendHeaders.*
{ ... "manifest_version": 3, "background": { "service_worker": "background.js" }, "host_permissions": ["<all_urls>"], "permissions": [ "declarativeNetRequest" ], ... }
"<all_urls>"
在background.js中进行以下更改:
// ... const MY_CUSTOM_RULE_ID = 1 chrome.declarativeNetRequest.updateDynamicRules({ removeRuleIds: [MY_CUSTOM_RULE_ID], addRules: [ { id: MY_CUSTOM_RULE_ID, priority: 1, action: { type: "modifyHeaders", requestHeaders: [ { operation: "set", header: "my-custom-header", value: "my custom header value" } ] }, condition: { "resourceTypes": ["main_frame", "sub_frame"] }, } ], });
测试结果
阅读文档https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/
6条答案
按热度按时间icomxhvb1#
PS:我是Requestly的作者,所以你可以为任何你不喜欢的事情责怪我:)
当OP提出这个问题的时候,这当然是不可能的,但是不久之后Chrome发布了一个实验性的WebRequest API。但是现在它们已经被正式包含在Chrome扩展中。你可以用它来修改Chrome中的请求和响应头。
清单V2代码
Google Chrome将在Manifest V3中弃用webRequest Blocking API。根据Google于2022年9月28日发布的official statement,所有带有Manifest v2的扩展从2023年6月起将无法在Chrome上运行。以下是使用Manifest v3 -https://github.com/requestly/modify-headers-manifest-v3修改请求和响应头的方法
清单V3代码:
规则.ts
背景.ts
完整的源代码可以在GitHub repo -https://github.com/requestly/modify-headers-manifest-v3中找到
如果你想使用Chrome/Firefox扩展,你可以使用Requestly,它允许你根据需要修改请求和响应头。
zbsbpyhn2#
chrome 17支持修改请求标头(https://developer.chrome.com/extensions/webRequest)。
xnifntxz3#
您找对了地方,但是拦截HTTP请求还不存在,但是扩展团队知道这是一个流行的请求,并且希望在不久的将来得到它。
euoag5mw4#
请记住,从chrome 72开始,除非您在
opt_extraInfoSpec
中添加了extraHeaders
,否则不允许使用某些头文件。因此,@sachinjain024的答案中的上述示例将类似于:有关详细信息,请查看文档Screenshot from the documentation https://developer.chrome.com/extensions/webRequest#life_cycle_footnote
3j86kqsm5#
您可以安装ModHeader扩展并添加头文件:
fjnneemd6#
对于使用manifest版本3的扩展,不能再使用
chrome.webRequest.onBeforeSendHeaders.*
。替代项是chrome.declarativeNetRequest在manifest.json中进行以下更改:
"<all_urls>"
用于修改所有传出url的标头。请根据您的工作范围限制此操作在background.js中进行以下更改:
测试结果
阅读文档https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/