簡體   English   中英

節點JS請求獲取ETIMEDOUT'IP地址'

[英]Node js request Getting ETIMEDOUT 'ip address'

她就是我在代碼中所做的

我正在閱讀包含大約3500個鏈接的文本文件,然后正在閱讀每個鏈接,過濾所需的鏈接,並進行請求以獲取狀態代碼,鏈接和頁面標題(使用cheerio)。 在繞過第100或200個鏈接后,我得到“ connect ETIMEDOUT 40 ...:443”。 鏈接看起來不錯。 這里發生了什么? 是Web服務器讓我以為它是DDOS嗎?我正在為我工​​作的公司這樣做,這顯然不是目的。 如果您想使用大量鏈接進行測試,我會使用https://hackertarget.com/extract-links/來獲取鏈接,然后將其放在文本文件中。

這是我的代碼

 var request = require('request'); var cheerio = require('cheerio'); var URL = require('url-parse'); var axios = require('axios'); const fs = require('fs'); const readline = require('readline'); var main = []; var linkdata = []; const rl = readline.createInterface({ input: fs.createReadStream('C:/Users/Jay/Documents/Javascript/crawl/links.txt'), crlfDelay: Infinity }); rl.on('line', (link) => { if (link.startsWith('https://www.example.com')) { var encodeLink = encodeURI(link) request(encodeURI(encodeLink), function (error, response, body) { console.log("Link: ",encodeLink) if (error) { console.log("Error:Request " + error); } // Check status code (200 is HTTP OK) if (response.statusCode === 200) { // Parse the document body var $ = cheerio.load(body); var Status_200 = { "status Code": response.statusCode, "Page title:": $('title').text(), "Original Link": encodeLink, } main.push(Status_200) } if (response.statusCode === 302 || response.statusCode === 404 || response.statusCode === 500) { // Parse the document body var Status_Errors = { "status Code": response.statusCode, "Page title:": $('title').text(), "Original Link": encodeLink, } main.push(Status_Errors) } //console.log(JSON.stringify(main)) fs.writeFile("C:/Users/Jay/Documents/Javascript/crawl/output.json", JSON.stringify(main), (err) => { if (err) console.log(err); console.log("Successfully Written to File."); }); }) } }); 

嘗試嘗試一下,因為使用異步來看看這是否有助於解決您遇到的內存錯誤,無論如何可能都是好的做法

 try { const body = response.data; if (response.status === 200) { //do ur thing } if (response.status === 302 || response.status === 404 || response.status === 500) { // Parse the document body //do ur thing } fs.writeFile("C:/Users/T440/Documents/crawl/output.json", JSON.stringify(main), (err) => { if (err) console.log(err); console.log("Successfully Written to File."); }); } catch (error) { //catch them erros } main.push(Status_ErrorsCatch) 

根據評論中的一些建議,我通過readline異步迭代器結構以及使用axios來簡化承諾速度,從而減慢了該過程

這是我如何解決ETIMEDOUT'ip address'問題的示例,我現在有內存問題,但原來的問題已解決,我認為

 async function processLineByLine() { const rl = readline.createInterface({ input: fs.createReadStream('C:/Users/T440/Documents/crawl/links.txt'), crlfDelay: Infinity }); for await (const line of rl) { if (line.startsWith('https://www.example.com')) { var encodeLink = encodeURI(line); const response = await axios.get(encodeLink).catch((err)=>{ 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM