2017-03-31 121 views
1

我有一个使用节点和请求的应用程序。直到今天,它运转良好,我不知道为什么,但它停止工作。我试图做一个简单的request.get()到一个特定的页面,它发送给我一个超时错误,但lib尝试访问的地址与远程地址不同。由于某种原因,似乎node-request没有将url转换为正确的ip。node-request ip addres与远程ip地址不同

请求调用:

request.get({ 
    url: 'http://www.website.to.request.com:8000/login.aspx', 
    headers: headers, 
} 

节点错误消息:

Request URL:http://www.website.to.request.com:8000/login.aspx 
Request Method:GET 
Status Code:200 OK 
Remote Address:201.11.11.111:8000 
Referrer Policy:no-referrer-when-downgrade 

注:

address:"200.200.00.00" 
code:"ETIMEDOUT" 
errno:"ETIMEDOUT" 
message:"connect ETIMEDOUT 200.200.00.00:8000" 
port:8000 
stack:"Error: connect ETIMEDOUT 200.200.00.00:8000 
    at Object.exports._errnoException (util.js:1022:11) 
    at exports._exceptionWithHostPort (util.js:1045:20) 
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1090:14)" syscall:"connect" 

铬调试请求。如果我试图访问:201.11.11.111:8000/login.aspx它的工作原理,但与200.200.00.00:8000不起作用。

如果我尝试使用https://www.hurl.it/获取页面内容并传递url和content-type作品;

有人知道这个请求是错误的吗?

+0

主机名是否解析为多个IP号码,其中一个无法访问? – robertklep

+0

由于chromes debug显示主机名称应该解析为201.11.11.111:8000。但节点请求解析为200.200.00.00:8000。似乎来自某处的缓存。如果我将'request.get({url:'http://www.website.to.request.com:8000/login.aspx']'request.get({url:http://201.11 .11.111:8000/login.aspx''它可以工作,但我不想让ip硬编码。 – Aleph

+0

错误信息中提到的那个端口8072是什么?你配置了一个代理吗?如果你使用Linux或者macOS,'host www.website.to.request.com'返回的是什么? – robertklep

回答

0

您可以尝试在requestjs调用之前对DNS请求进行硬编码,然后您可以使用您返回的IP设置请求url。

这是API,你可以用它来执行DNS查找: https://nodejs.org/api/dns.html

记住,你可以使用dns.setServers硬编码一些DNS服务器([ '8.8.8.8', '8.8.4.4']对于谷歌DNS)