【发布时间】:2018-12-28 14:27:05
【问题描述】:
如果我通过“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:错误: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
但我认为这不是端口的问题,因为当我使用 fiddler 代理时,它可以工作!
这是我关于提琴手的配置
代码(由提琴手提供)
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);
}
但是,根据上面的代码,Proxy改为'149.56.109.24:3128'(没有fiddler)还是会报'unknown protocol:openssl\ssl\s23_clnt.c:827'错误
所以出了什么问题?我还没解决。
【问题讨论】:
标签: node.js ssl https proxy request