Nodejs Node 16 无法给 https 请求使用 http 代理了
Nodejs Node 16 无法给 https 请求使用 http 代理了
Node 14 是可以的,不清楚有没有人可以搞定,可以付费
代理是为了下载东西?
有可复现的代码吗?
我今天也遇到类似的问题,发现是因为 npm 包的版本太老,不支持 node16 ,修改 npm 包版本后就好了
确定 http_proxy 和 https_proxy 都试过?理论上 http 代理只是用 http 协议做握手的。
跟请求的 url 也有关系,有些就不会报错,有些偶尔能成功,不过我发现请求其实成功了:js<br>let url = require('url')<br>let https = require('https')<br>let HttpsProxyAgent = require('https-proxy-agent')<br><br>// HTTP/HTTPS proxy to connect to<br>let proxy = 'http://127.0.0.1:7070'<br>console.log('using proxy server %j', proxy)<br><br>// HTTPS endpoint for the proxy to connect to<br>let endpoint = '<a target="_blank" href="https://registry.npmjs.org/coc-omni'" rel="nofollow noopener">https://registry.npmjs.org/coc-omni'</a><br>console.log('attempting to GET %j', endpoint)<br>let options = url.parse(endpoint)<br><br>// create an instance of the `HttpsProxyAgent` class with the proxy server information<br>let agent = new HttpsProxyAgent(proxy)<br>options.agent = agent<br><br>https.get(options, function (res) {<br> console.log('"response" event!', res.headers)<br> res.pipe(process.stdout)<br>})<br><br>
有一定失败的 url 吗?
我昨天碰到一个窘境,node-sass 需要 node-gyp ,node-gyp 又有一大堆依赖,同时还不支持 node 15 往上。 最直接的方式就是弄个 docker image, 把代码考进去,每次跑容器就好了
dockerfile<br>FROM node:14-alpine as base<br>ENV HOME=/home/node<br>RUN apk add --no-cache python3 make g++ && \<br> yarn global add node-gyp@${VERSION} && \<br> yarn cache clean && \<br> node-gyp help && \<br> mkdir $HOME/.cache && \<br> chown -R node:node $HOME<br>USER node<br>VOLUME $HOME/.cache<br>WORKDIR $HOME<br>CMD ["sh"]<br><br>FROM base<br>WORKDIR /frontend<br>COPY package.json package.json<br>RUN yarn install<br>COPY . .<br>CMD ["npm", "start"]<br>
现在流行 ship with environment 不是没有理由的, 越来越多的版本和各式各样的依赖,只要一个不对口,整个项目就跑不起来
在Node.js中,使用HTTP代理来处理HTTPS请求确实需要一些额外的配置,特别是在Node.js 16及更高版本中,因为底层的HTTP/HTTPS库有了一些变化。不过,你可以使用https
模块结合http-proxy-agent
或https-proxy-agent
库来实现这个功能。
以下是一个使用https-proxy-agent
库的示例代码,展示了如何通过HTTP代理发送HTTPS请求:
const https = require('https');
const HttpsProxyAgent = require('https-proxy-agent');
// 代理服务器地址和端口
const proxy = 'http://your-proxy-server:port';
// 目标HTTPS请求的选项
const options = {
hostname: 'example.com',
port: 443,
path: '/',
method: 'GET',
agent: new HttpsProxyAgent(proxy) // 使用代理
};
// 发起请求
const req = https.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.error(`Problem with request: ${e.message}`);
});
req.end();
请确保你已经安装了https-proxy-agent
库,可以通过运行npm install https-proxy-agent
来安装。将your-proxy-server:port
替换为你的代理服务器地址和端口。这段代码将使用指定的HTTP代理来发送HTTPS请求。