簡體   English   中英

Node Js 多個 HTTPS 請求連接在一個腳本中

[英]Node Js multiple HTTPS request connection in one script

嘿伙計們,我第一次嘗試使用 nodejs 進行多個 https 連接時有點卡住了。 以下代碼將無法啟動,我收到一條錯誤消息,內容為:

Hint: hit control+c anytime to enter REPL.
events.js:174
      throw er; // Unhandled 'error' event
      ^

Error: socket hang up
    at createHangUpError (_http_client.js:323:15)
    at TLSSocket.socketOnEnd (_http_client.js:426:23)
    at TLSSocket.emit (events.js:203:15)
    at TLSSocket.EventEmitter.emit (domain.js:448:20)
    at endReadableNT (_stream_readable.js:1143:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
Emitted 'error' event at:
    at TLSSocket.socketOnEnd (_http_client.js:426:9)
    at TLSSocket.emit (events.js:203:15)
    [... lines matching original stack trace ...]
    at process._tickCallback (internal/process/next_tick.js:63:19)

(To exit, press ^C again or type .exit)

這是我的代碼:

const https = require('https');

function RandomIp(length) {
   var result           = '';
   var characters       = '123456789';
   var charactersLength = characters.length;

   for ( var i = 0; i < length; i++ ) {
      result += characters.charAt(Math.floor(Math.random() * charactersLength));
   }

   return result;
}

var userAgent = 'iPhone / Safari 12.1.1 [Mobile]: Mozilla/5.0 (iPhone; CPU OS 10_15_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Mobile/14E304 Safari/605.1.15';
var flag      = false;
var ip        = RandomIp(3) +"."+ RandomIp(3) +"."+ RandomIp(3) +"."+ RandomIp(3);

const options = {
  hostname: 'sh0rt.me',
  port: 443,
  path: '/r/XX6fYM',
  method: 'GET',
  headers: {
     'X-Forwarded-For': ip,
     'User-Agent': userAgent
  }
};

const req = https.request(options, (res) => {
  console.log('statusCode:', res.statusCode);
  console.log('headers:', res.headers);

  res.on('data', (d) => {
    process.stdout.write(d);
    console.log("first connection successfull!")
    console.log(flag);

    flag=!flag;
    console.log(flag);

    if (flag == true){
      console.log("Ready for second connection");

      const optionsd = {
        hostname: 'sh0rt.me',
        port: 443,
        path: '/r/XX6fYM',
        method: 'GET',
        headers: {
          'X-Forwarded-For': ip,
          'User-Agent': userAgent,
          'Cookies' : 'cookies lol'
        }
      };

      const reqd = https.request(optionsd, (resd) => {
        console.log('statusCode:', resd.statusCode);
        console.log('headers:', resd.headers);

        resd.on('data', (d) => {
          //process.stdout.write(d);
          console.log("1. Anfrage erfolgreich!")
          console.log(flag);
          console.log(options);
        })
      });

    };

    req.on('error', (e) => {
      console.error(e);
    });
  });
});

我知道這個問題很長,但如果有人能告訴我我做錯了什么,我會很高興。

謝謝各位^^

該代碼有很多問題可以解決,對於初學者來說,您沒有在“reqd”對象(由您的第二個 https.request 返回)中為“error”事件添加偵聽器,這就是為什么不打印控制台中的錯誤。

您實際上不需要在此代碼中添加 req.end() 調用,因為連接將在腳本結束時完成(在此上下文中很好),而且,不要使用包含的 https 模塊進行請求, 是不需要事件綁定的更好的實現,例如:

  • isomorphic-fetch (您可以在瀏覽器中找到的 fetch 函數的一個非常相似的實現)
  • axios (非常好且完整)

其他事情,永遠不要做:

if(flag == true)

因為如果期望一個真值或假值,那么標志就已經是這樣了,就像:

if(flag)

另外,對於我所看到的(如果我錯了,請糾正我)您正在生成隨機 ips?,這可能不起作用,因為 ips 不是隨機的,它們有一個結構,不像使用四個 3 位數字,它會是一個有效的IP地址。

首先嘗試使用您已經知道的 ips,可能因此而引發錯誤。

暫無
暫無

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

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