2017-03-31 40 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)