我想使用chrome代理API。我在后台脚本中有这段代码,但它不会工作
const proxyData = []
const fetchProxyData = () => {
axios({
method: "GET",
baseURL: "https://api.getproxylist.com/proxy",
params: {
protocol: "http",
allowsPost: 1,
allowsHttps: 1,
anonimity: "high anonymity"
}
}).then( (response) => {
console.log(response.data)
proxyData.push(response.data)
})
}
fetchProxyData();
var config = {
mode: "fixed_servers",
rules: {
singleProxy: {
host: proxyData.ip,
port: proxyData.port
}
}
}
chrome.proxy.settings.set({
value: config,
scope: "regular"
}, () => {
console.log(`proxy configured with data: ${proxyData}`)
})
我在后台页面控制台中收到此错误:background.js:55 Uncaught TypeError: Invalid invocation
我已经尝试了代理api文档中提供的示例,不会出现错误。也许是配置对象造成的?正如您在代码中看到的那样,为了设置代理,我正在使用ajax调用,也许这是问题所在吗?
有什么解决办法吗?
当我找到解决方案时,我也遇到过同样的问题,这是一个愚蠢的错误。
我已将字符串值传递给port
。
请确保将整数值传递给port
关闭。几件事。
首先,您需要在调用Chrome的代理API之前获取数据。第二,从proxyData
数组中获取配置的属性,而不是从axios调用中获取JSON对象。
你需要做这样的事情:
const proxyData = [];
const fetchProxyData = () => {
axios({
method: "GET",
baseURL: "https://api.getproxylist.com/proxy",
params: {
protocol: "http",
allowsPost: 1,
allowsHttps: 1,
anonimity: "high anonymity"
}
}).then((response) => {
const {data} = response;
proxyData.push(data);
const config = {
mode: "fixed_servers",
rules: {
singleProxy: {
host: data.ip,
port: data.port
}
}
};
chrome.proxy.settings.set({
value: config,
scope: "regular"
}, () => {
console.log(`proxy configured with data: ${data}`)
});
})
};
fetchProxyData();
你的代码发生了什么。。。singleProxy
(在config
中(中的属性host
和port
被指派为undefined
,因为这些属性不存在于阵列proxyData
中。它们存在于您的axios调用返回的对象中(上图,data
(。
undefined
密钥导致Chrome抛出Invalid Invocation错误。
对于其他遇到无效调用问题的人来说,在我看来,问题通常存在于传入Chrome的配置中。特别是每个键的类型。
在我的例子中,当端口需要是一个数字时,我将其作为字符串传递。