在Chrome扩展程序中收听HTTPS Connect请求

时间:2014-08-20 12:48:59

标签: google-chrome google-chrome-extension proxy

我正在尝试通过Chrome扩展程序使用HTTPS代理进行身份验证。即使我使用chrome.webRequest.onBeforeSendHeaders设置自定义标头,HTTPS代理也无法正常工作。

我怀疑这是因为Chrome会自动向代理发送CONNECT请求而不会引发事件。代理检查自定义身份验证标头,如果它们不存在,则拒绝连接。

关于如何监听CONNECT请求的任何想法?

2 个答案:

答案 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"

工作的人!