如果我通过“ HTTP”代理请求“ HTTP”地址,一切都很好
const rq = require('request-promise');
try {
let res = rq({
url: 'http://xxxx',
timeout: TIME_OUT,
gzip: true,
proxy: 'http://112.25.60.32:8080'
});
res.then(res => {
console.log('res');
console.log(res);
}).catch(err => {
console.log(err);
});
} catch (error) {
console.log(error);
}
但如果通过“ https”代理请求“ https”地址,它将返回“未知协议”
RequestError:错误:无法建立隧道套接字,原因=写入EPROTO 101057795:error:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议:openssl \ ssl \ s23_clnt.c:827:
try {
let res = rq({
url: 'https://ipinfo.io/', // https address
timeout: TIME_OUT,
gzip: true,
rejectUnauthorized: false,
proxy: 'https://149.56.109.24:3128' // https proxy
});
res.then(res => {
console.log('res');
console.log(res);
}).catch(err => {
console.log(err);
});
} catch (error) {
console.log(error);
}
起初,我认为代理地址存在问题。但是相同的代理地址在python请求模块中可以正常工作
python代码
import requests, os
os.environ['HTTP_PROXY'] = '112.25.60.32:8080'
os.environ['HTTPS_PROXY'] = '149.56.109.24:3128'
try:
text = requests.get('https://ipinfo.io/').text # request https address
except Exception as e:
print(e)
print('connect failed')
print(text)
# it works fine! {
"ip": "149.56.109.24:3128",
"hostname": "181.ip-158-69-206.net",
"city": "Montreal",
"region": "Quebec",
"country": "CA",
"loc": "45.5000,-73.5833",
"postal": "H3A",
"org": "AS16276 OVH SAS"
}
# The returned 'ip' information is the 'https' proxy address.
在StackOverflow中发现了类似的问题。有人回答这是端口问题。
这里是链接StackOverflow
但是我认为这不是端口问题,因为当我使用提琴手的代理时,它就可以了!
这是我关于提琴手的配置
代码(由提琴手提供)
try {
let res = rq({
url: 'https://ipinfo.io/',
timeout: TIME_OUT,
gzip: true,
rejectUnauthorized: false,
proxy: 'http://127.0.0.1:8888' // through fiddler
});
res
.then(res => {
console.log('res');
console.log(res); // it works!!
})
.catch(err => {
console.log(err);
});
} catch (error) {
console.log(error);
}
但是,根据上述代码,代理更改为“ 149.56.109.24:3128”(不带提琴手)仍将报告“ 未知协议:openssl \ ssl \ s23_clnt.c:827 ”错误
那出了什么问题?我还没有解决。
答案 0 :(得分:1)
proxy: 'https://149.56.109.24:3128' // https proxy
HTTP代理将处理HTTP和HTTPS。通过简单地连接到HTTP代理,发出CONNECT请求以建立到服务器的隧道,然后将连接升级到该隧道内的TLS来处理HTTPS,从而产生端到端HTTPS。
您配置的是通过HTTPS访问代理本身,本质上是在HTTPS隧道内要求HTTPS。代理很可能不支持此功能,即使用http://
访问代理而不使用https://
。