javascript Chrome扩展程序代理身份验证

t1qtbnec  于 2023-05-12  发布在  Java
关注(0)|答案(2)|浏览(158)

我在使用chrome扩展的代理身份验证中遇到了问题(由于v3的问题,我的代码基于manifest v2)。连接使用以下curl命令工作:
curl -v -x https://11.111.11.111:222 https://www.google.com/ --proxy-header "proxy-authorization: Basic abc" --proxy-insecure
我试着在扩展中实现它。以下是background.js文件中的内容:

chrome.runtime.onStartup.addListener(() => {
    const config = {
            mode: 'fixed_servers',
            rules: {
                singleProxy: {
                    host: '11.111.11.111',
                    port: 222,
                    scheme: 'https',
                },
            },
        }

        chrome.proxy.settings.set({ value: config, scope: 'regular' })
})

chrome.webRequest.onBeforeSendHeaders.addListener(
    (details) => {
        const requestHeaders = details.requestHeaders || []
        requestHeaders.push({
            name: 'proxy-authorization',
            value: 'Basic abc',
        })

        return { requestHeaders }
    },
    { urls: ['<all_urls>'] },
    ['blocking', 'requestHeaders', 'extraHeaders']
)

chrome.webRequest.onSendHeaders.addListener(
    (details) => {
        console.log('sending', details)
        return details
    },
    { urls: ['<all_urls>'] },
    ['requestHeaders', 'extraHeaders']
)

我在manifest.json中拥有以下权限:

"permissions": [
        "cookies",
        "storage",
        "tabs",
        "activeTab",
        "proxy",
        "webRequest",
        "webRequestBlocking",
        "<all_urls>"
    ]

以下是onSendHeaders函数中打印的标题:

您可以看到存在proxy-authorization头。但我得到ERR_PROXY_CERTIFICATE_INVALID,而试图浏览任何页面。是否应该以不同的方式设置代理标头?因为我在curl命令中使用了--proxy-header标志,而不是--header
PS.我尝试使用多次提到的方法:

chrome.webRequest.onAuthRequired.addListener(function(details, callbackFn) {
    callbackFn({
        authCredentials: { username: username, password: password }
    });
},{urls: ["<all_urls>"]},['asyncBlocking']);

但是这个函数从来没有被调用过(我把console.log放在里面)。

wswtfjt7

wswtfjt71#

你解决这个问题了吗?
如果没有,试试这个:

chrome.webRequest.onAuthRequired.addListener(function(details, callbackFn) {
    callbackFn({
        authCredentials: { username: username, password: password }
    });
},{urls: ["<all_urls>"]},['blocking']);

主要变化-AsyncBlocking=>Blocking

pftdvrlh

pftdvrlh2#

解决方案是在manifest.json中添加manifest v3:

"permissions": [
    "webRequest",
    "webRequestAuthProvider",
]

background.js

chrome.webRequest.onAuthRequired.addListener(function(details, callbackFn) {
    callbackFn({
        authCredentials: { 
           username: YOUR_USERNAME, 
           password: YOUR_PASSWORD 
        }
    });
},{urls: ["<all_urls>"]},['asyncBlocking']);

这对我很有效。希望这能帮上忙。

相关问题