我正在开发一个 Chrome 扩展程序,允许用户记录站点的所有 HTTP 请求,修改请求的片段,然后重新发送。
我希望使用 jQuery's ajax method构建并发送修改后的请求。我已经能够构建请求的其他部分,但据我所知,没有办法在请求中包含 cookie 值。
需要说明的是 - 我不是要在浏览器上创建 cookie,我是要修改将作为 HTTP 请求的一部分使用 jQuery 的 ajax 方法发送的 cookie 值。
这可以用 jQuery 的 ajax 来完成吗?如果没有,有没有办法用 javascript 来做?
最佳答案
既然你在谈论 Chrome 扩展,你可以使用 webRequest
API拦截和修改您的请求。
chrome.webRequest.onBeforeSendHeaders.addListener(
function(details) {
/* Identify somehow that it's a request initiated by you */
for (var i = 0; i < details.requestHeaders.length; i++) {
if (details.requestHeaders[i].name === 'Cookie') {
/* Do something with it */
break;
}
}
/* Add the Cookie header if it was not found */
return {requestHeaders: details.requestHeaders};
},
{urls: ["*://*.example.com/*"]},
["blocking", "requestHeaders"]
);
这样您就可以在不实际修改浏览器的 cookie 存储的情况下修改 cookie。 我说“应该”是因为我还没有测试过这个解决方案。
一些要点:
- 您将需要权限:
"webRequest"
、"webRequestBlocking"
和主机权限(对于此示例,"*://*.example.com/"
) - 需要注意的是,您不能拦截自己的同步请求,以防止出现死锁。只要您的 AJAX 是异步的,就没有关系。
- 如果您需要阻止
Set-Cookie
响应到达 cookie 存储区,您可以通过修改onHeadersReceived
中的响应 header 来实现。您可以使用请求 ID 找到相应的响应。
关于javascript - 可以修改 jQuery ajax 请求中的 cookie 值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29813340/