我正在尝试制作Chrome扩展程序,该扩展程序可以在浏览器中打开或关闭代理。我使用有关chrome扩展的文档在javascript中编写了一些代码,有趣的是,有时扩展正常。
以下是Golang中的一些代码,该代码循环访问https代理地址列表,使用该代理地址向www.stackoverflow发出http请求,并且响应状态代码为2xx(因为某些地址无效,不建议使用,不可用,被禁止)等),它会标记代理地址正确并打印出来。
代码的第二个块设置了具有找到的“好”代理地址的chrome.proxy.settings
属性。现在,我只是手动复制粘贴。
问题是:为什么Golang会选择“错误的”代理地址,给我列出“良好”的代理,但是当我尝试设置任何“良好”的代理时,Chrome会给我我ERR_PROXY_CONNECTION_FAILED
?
编辑:在Go
中添加User-Agent
标头,在JavaScript
中将scheme : https
字段添加到config
对象以进行代理。
仍然无法正常工作。
// checkProxy returns true if proxy adress a is valid and
// response by http request with this proxy is ok (2xx)
//185.132.179.108:1080
//185.132.179.107:1080
func checkProxy(a string) (string, bool) {
proxyUrl, err := url.Parse("http://" + a)
httpClient := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
},
}
req, err := http.NewRequest("GET", "http://stackoverflow.com", nil)
if err != nil {
return "", false
}
req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36")
response, err := httpClient.Do(req)
if err != nil {
return "", false
}
if response.StatusCode <= 200 && response.StatusCode >= 299 {
return "", false
} else {
return a, true
}
}
function setProxySettings(iip, pport) {
var config = {
mode: "fixed_servers",
rules: {
//https://www.proxy-list.download/HTTPS
// host: "107.191.63.8",
// port: 32482
singleProxy: {
scheme: "https",
host: iip,
port: parseInt(pport)
},
}
};
chrome.proxy.settings.set({
value: config,
scope: 'regular'
},
function () {});
}