首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点js请求代理

节点js请求代理
EN

Stack Overflow用户
提问于 2018-01-03 00:41:58
回答 1查看 5.9K关注 0票数 1

我通过代理发送请求,并且总是收到这样的响应。

代码语言:javascript
复制
tunneling socket could not be established, cause=read ECONNRESET

代码语言:javascript
复制
tunneling socket could not be established, cause= socket hang up

我的代码

代码语言:javascript
复制
      let settings = {
    url: `url`,
    headers: {
      'Connection': 'keep-alive',
      'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"
    },
    method: 'POST',
    proxy: `http://${ip}:${port}`,
    strictSSL: false
  }
request.request(settings, (err, response, body) => {
 // err here
})

我做错了什么?

现在这个错误:错误:隧道创建失败。套接字错误:错误:读取ECONNRESET

我的代码:

代码语言:javascript
复制
  const request = require('request'),
  proxyingAgent = require('proxying-agent');

代码语言:javascript
复制
let settings = {
    url: url,
    headers: {
      'Connection': 'keep-alive',
      'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"
    },
    method: 'POST',
    // proxy: `http://${obj.proxy[obj.proxyIdx]}`,
    agent: proxyingAgent.create(`http://${obj.proxy[obj.proxyIdx]}`, url),
  }
EN

回答 1

Stack Overflow用户

发布于 2018-01-03 00:47:01

关于您的代码,问题可能存在于您的settings对象中。

您需要使用如下语法:

代码语言:javascript
复制
let settings = {
  url,
  headers: {
  'Connection': 'keep-alive',
  'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"
  },
  method: 'POST',
  proxy: `http://${ip}:${port}`,
  strictSSL: false
}

这里我们使用ES6来简化object。

也可以通过npm包proxying agent建立代理连接。

您的代码应该如下所示:

代码语言:javascript
复制
const proxyingAgent = require('proxying-agent');
const fetch = require('node-fetch');

const host = <your host>;
const port = <port>;

const creds = {
  login: 'username',
  password: 'pass'
};

const port = <proxy port>;

const buildProxy = (url) => {
  return {
      agent: proxyingAgent.create(`http://${creds.login}:${creds.password}@${host}:${port}`, url)
  };
};

//If you don't have credentials for proxy, you can rewrite function

const buildProxyWithoutCreds = (url) => {
  return {
      agent: proxyingAgent.create(`http://${host}:${port}`, url)
  };
};

然后你可以用你的url和凭证来使用它。我们将使用fetch包。

代码语言:javascript
复制
const proxyGetData = async (url, type) => {
   try {
       const proxyData = buildProxyWithoutCreds(url);
       // Make request with proxy. Here we use promise based library node-fetch
       let req = await fetch(url, proxyData);

       if (req.status === 200) {
         return await req[type]();
       }
       return false;
    } catch (e) {
      throw new Error(`Error during request: ${e.message}`);
    }
  };
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48064695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档