我正在尝试通过Chrome扩展程序使用HTTPS代理进行身份验证。即使我使用chrome.webRequest.onBeforeSendHeaders
设置自定义标头,HTTPS代理也无法正常工作。
我怀疑这是因为Chrome会自动向代理发送CONNECT请求而不会引发事件。代理检查自定义身份验证标头,如果它们不存在,则拒绝连接。
关于如何监听CONNECT请求的任何想法?
答案 0 :(得分:1)
webRequest
API为designed in a way that proxying is transparent to it。
另请参阅该链接上onBeforeSendHeaders
忽略的标头列表。
因此,您无法使用webRequest
来影响代理。
答案 1 :(得分:0)
function interceptData() {
var xhrOverrideScript = document.createElement('script');
xhrOverrideScript.type = 'text/javascript';
xhrOverrideScript.innerHTML = `
function addXMLRequestCallback(callback) {
var oldSend, i;
if (XMLHttpRequest.callbacks) {
XMLHttpRequest.callbacks.push(callback);
} else {
XMLHttpRequest.callbacks = [callback];
oldSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function () {
for (i = 0; i < XMLHttpRequest.callbacks.length; i++) {
XMLHttpRequest.callbacks[i](this);
}
oldSend.apply(this, arguments);
}
}
}
addXMLRequestCallback(function (a) {
a.onloadend = (xhr) => {
if (xhr.currentTarget.responseURL.includes("api.google.com")) {
console.log(xhr.currentTarget.response);
}
if (xhr.currentTarget.responseURL.includes("https://api.google.com")) {
console.log(xhr.currentTarget.response);
} else {
}
}
});
document.head.prepend(xhrOverrideScript);
}
function checkForDOM() {
if (document.body && document.head) {
interceptData();
} else {
requestIdleCallback(checkForDOM);
}
}
requestIdleCallback(checkForDOM);
并将其添加到manifest.json
"run_at": "document_start"
工作的人!