[英]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 模塊進行請求, 是不需要事件綁定的更好的實現,例如:
其他事情,永遠不要做:
if(flag == true)
因為如果期望一個真值或假值,那么標志就已經是這樣了,就像:
if(flag)
另外,對於我所看到的(如果我錯了,請糾正我)您正在生成隨機 ips?,這可能不起作用,因為 ips 不是隨機的,它們有一個結構,不像使用四個 3 位數字,它會是一個有效的IP地址。
首先嘗試使用您已經知道的 ips,可能因此而引發錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.