ããã«ã¡ã¯ãç§ã¯ãã®ãããªåé¡ã以åã«äœæãããããšãç¥ã£ãŠããŸãããå°ãç°ãªã説æããããŸããã
ãã©ãŒã ããŒã¿ãéä¿¡ãããšããç°¡åãªãªã¯ãšã¹ããå®è¡ããããšããŸããã ãããããªã¯ãšã¹ãã¢ãžã¥ãŒã«ã䜿çšãããšãåžžã«ããœã±ããã®ãã³ã°ã¢ããããã¹ããŒãããŸãã
以äžã®ç°¡åãªãã¹ãã±ãŒã¹ãšçµæ
'use strict';
const request = require('request');
const http = require('http');
const querystring = require('querystring');
const data = {
xstext: 'I have a some problem about node.js server. What should I do to solve the this problem?',
spintype: 0,
removeold: 0,
};
// Using request
request(
{
method: 'POST',
url: 'http://address:9017/',
form: data,
},
(error, responce, body) => {
if (!error) {
console.log(body, responce);
return;
}
console.log(error);
}
);
// Using native http
let postData = querystring.stringify(data);
let options = {
hostname: 'address',
port: 9017,
path: '/',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postData.length,
},
};
let req = http.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.log(`problem with request: ${e.message}`);
});
req.write(postData);
req.end();
ãªã¯ãšã¹ãã¢ãžã¥ãŒã«ã®å ŽåïŒ
{ [Error: socket hang up] code: 'ECONNRESET' }
ãã€ãã£ãhttpã®å ŽåïŒ
STATUS: 200
HEADERS: {"content-length":"98","content-type":"text/html","cache-control":"no-cache","connection":"keep-close"}
BODY: Excellent some problem about client. js server. What must i do to solve the particular this issue?
No more data in response.
ãªã¯ãšã¹ãã¢ãžã¥ãŒã«ã®ãã°ã®ããã§ãã
åãåé¡ããããŸããããªãã·ã§ã³gzip:true
ãè¿œå ãããšæ©èœããŸãã
ã©ã®ããŒãžã§ã³ã®node.jsã䜿çšããŠããŸããïŒ 0.10ãã0.12ã«ã¢ããã°ã¬ãŒãããåŸã ECONNRESET
äŸå€ãçºçããããšããããŸãã node.jsã®ãã°ãæãäžãããšãããã¯0.12ã§å£ããŠãããåŸã§ä¿®æ£ãããå¯èœæ§ããããŸãã
ããã§åãåé¡ã æŽæ°ã¯ãããŸããïŒ node.js 4.2.2ã䜿çšããŠããŸãããå®æçïŒ1åéã«3ã4åïŒã®ECONNRESETãšã©ãŒãçºçããŸãã
ããã«ã¡ã¯@aymebaãã®ä¿®æ£ãé©çšãããæåã®4.xããŒãžã§ã³ã¯4.4.0ã®ããã§ãã
http: handle errors on idle sockets
ãšããã¿ã€ãã«ã®ã³ããããæ¢ããŸãã ãã®ã¿ã€ãã«ã¯ããŸããŸãªãã©ã³ãã«é©çšããããããããŸããŸãªã³ãããããããŸãã
æ°ã«ããªãã§ãã ãããç§ã¯æ··ä¹±ããŠãnode.jsïŒïŒ3595ïŒã®ECONNRESETãã°ã«ã€ããŠè©±ããŠããŸããã
ããªããææãããã°ã®ããã§ã¯ãªããšæããŸãã ç§ãã¡ã®å Žåãããã¯è¡šç€ºãããŸãïŒ
éåžžã®å Žåãããã¯ãšã³ããµãŒããŒããã®ãšã©ãŒãã¹ããŒããå¿ èŠãããããããã®ãšã©ãŒãçºçããã®ã¯æ··ä¹±ããŠããŸãã
ããã«ã€ããŠã®æŽæ°ã¯ãããŸããïŒ botkit0.2.1ã§ãšã©ãŒã衚瀺ãããŸãã
åæ§ã®åé¡ãçºçããŠããŸãã ç§ã¯äœæéãã®èª¿æ»ããã¹ãããããã°ãè¡ã£ãŠããŸããã ç§ã®å ŽåãPostmanãä»ããŠåãrestapiã«æçš¿ãããšããšã³ããã€ã³ãã¯æ£åžžã«æ©èœããŸãã ãã€ãã£ãNodeJShttp.requeståŒã³åºããä»ãããªã¯ãšã¹ãã®äœæã¯å€±æããŸãã ãã¹ãŠã®ããããŒãšãã€ããŒãïŒæ¬äœïŒã¯åãã§ãã ïŒããããŒã«éµäŸ¿é éçšããŒã¯ã³ããªãå Žåãé€ãïŒ
å®å šé瀺ãç§ã¯ãµãŒããŒã«restifyã䜿çšããŠããŸãã
ãµãŒããŒåŽã§restifyã䜿çšããŠããå Žåã¯ãç£æ»äººãæå¹ã«ããã®ã«åœ¹ç«ã¡ãŸããããã«ãããäœãèµ·ãã£ãŠãããã«ã€ããŠã®ãã³ããåŸãããŸãã ãŸãããµãŒããŒãäœãæåŸ ããããèªèã§ããããã«ããªã¯ãšã¹ãã«æ£ãããContent-Typeããèšå®ããŠããããšã確èªããŠãã ããã ãµãŒããŒããªã¯ãšã¹ãã誀解ããŠãããšãã«ãã®ãšã©ãŒãçºçããã®ã§ãã³ã³ãã³ãã¿ã€ããæå®ãããšåœ¹ç«ã¡ãŸãã
ãã®åé¡ã«é¢ããæŽæ°ã¯ãããŸããïŒ ãã®åé¡ã¯Nodev5.0.0ã§ãçºçããŠããŸãã ãªã¯ãšã¹ããè¡ãããŠãã45ç§åŸã«ãšã©ãŒãã¹ããŒãããããã§ãã
ç§ã¯HapiJSã§ãããšåãåé¡ãèŠãŠããŸããã åé¡ã¯ééã£ãcontent-lengthããããŒã§ãã
ãµãã¹ã¯ãªãã·ã§ã³ãšéç¥ã®ãªã¯ãšã¹ãããããã®ã§ãã...
ããŒãv6.9.2ã§çºçããŸãã
get: async function(ctx) {
let body = await new Promise(function(resolve, reject) {
return ctx.req.pipe(request('/path/to/my/backend', function(err, res, body) {
if (err) { return reject(err) }
resolve(body)
}))
})
return body
}
ããã¯ããŒã6.6.0ã§ãèŠãããŸãã æ¥ç¶ããŠãããµãŒããŒã¯ãå¿çã§Content-LengthããããŒãéä¿¡ããŠããŸããããã®å ŽåãHTTPä»æ§ã«åŸã£ãŠããµãŒããŒã¯ãã¹ãŠã®ããŒã¿ãéä¿¡ããåŸã«ã¹ããªãŒã ãéããå¿ èŠããããŸãã ãœã±ããããã³ã°ã¢ãããããããããã誀ã£ãŠè§£éãããŠããã®ã§ã¯ãªãããšæããŸãã cURLã䜿çšããŠåããªã¯ãšã¹ããè¡ããšæ£åžžã«æ©èœããŸãã
+1
ããŒã6.9.4
ãªã¯ãšã¹ã2.79.0
ã«ãŒã«ã§ããŸãæ©èœããŸã
ååŸããããšããŠããURLã¯ããããŒContent-Lengthãè¿ããŸã
+1
ããŒã6.9.1
ãªã¯ãšã¹ã2.79.0
Wgetãcurl-æåããããrequest-ãšã©ãŒã
ããŒã-v6.9.4
ãªã¯ãšã¹ã-2.79.0
# node req.js
REQUEST { uri: 'http://wtfismyip.com', callback: [Function] }
REQUEST make request http://wtfismyip.com/
{ Error: socket hang up
at createHangUpError (_http_client.js:254:15)
at Socket.socketOnEnd (_http_client.js:346:23)
at emitNone (events.js:91:20)
at Socket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9) code: 'ECONNRESET' }
åãåé¡ãæ±ããŠããŸãã èå³æ·±ãããšã«ã6.4.0ã§ã¯åãã³ãŒããæ©èœããããããªã¯ãšã¹ãããŒãžã§ã³ãšã¯ç¡é¢ä¿ã®ããã§ããã6.9.2ã§ã¯æ©èœããŸããïŒãããã¯ãããŸããŸã€ã³ã¹ããŒã«ãã2ã€ã®nodejsããŒãžã§ã³ã§ãïŒã
ç§ã®å Žåã Connection: keep-alive
ããããŒãèšå®ããããšã§ãåé¡ãåé¿ããããšãã§ããŸããã
@dieseldjangoææ¡ãããããšãã ããããç§ã®å Žåã¯è§£æ±ºããŸããã§ããã
è€è£œã®ããã«ããã®ãšã©ãŒãåºããµã€ãã¯æ¬¡ã®ãšããã§ãã
{ request:
{ debugId: 1,
uri: 'https://www.deal.no/',
method: 'GET',
headers:
{ Connection: 'keep-alive',
host: 'www.deal.no',
'accept-encoding': 'gzip, deflate' } } }
error: Error: socket hang up
at TLSSocket.onHangUp (_tls_wrap.js:1111:19)
at TLSSocket.g (events.js:291:16)
at emitNone (events.js:91:20)
at TLSSocket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
..éä¿¡ãããããããŒããããã°ããããã«request-debugã䜿çšãã
ããã¯ãŸã 解決ãããŠããŸãããïŒ 2é±éåãšåãããã«æ£åžžã«æ©èœããŠããŸããããçŸåšãã®ãšã©ãŒãçºçããŠããŸã{ [Error: socket hang up] code: 'ECONNRESET', response: undefined }
ããŒã-v4.4.7
ããããŒã®ãaccept-encodingããåé€ããŠã¿ãŠãã ããïŒãgzipãdeflateãã¯ããã解決ããŸããã
ç§ã¯äººã ããã®ãšã©ãŒãããé »ç¹ã«åããŠããã®ãèŠãŸãã ç§ã®å Žåãããã¯æ¬åœã«ç°¡åã§ããã ç§ãç§ã®ã¢ã«ãŽãªãºã ã®äžã€ã«åºã¥ããŠé©åã«åœ¢æãããURLã ã£ãäœãå®éã«å¥åœ¢ãŸããã ãã®åé¡ãçºçããŠãããã¹ãŠã®äººã«ãåé¡ãã³ãŒãã«ãããšæ³å®ããããšããå§ãããŸãã 確ãã«ã98ïŒ ã®å Žåãæ ¹æ¬çãªåå ã¯ãåœããåã®ããšããŸãã¯èŠèœãšããŠããããšã§ãã ç§ã¯åé¡ã解決ããããã«äžèšã®ãã¹ãŠãè©ŠããŸããããçµå±ãäœåãªã¹ã©ãã·ã¥ã«ãªããŸããã
ç§ã¯ããªããèšããã¹ãŠã®ææ¡ã«åŸãããã«ããŠããŸããããã®åé¡ã¯ãŸã çºçããŠããŸãã ãšãŠãæ²ãã....
ããã誰ããå©ãããªããç§ã¯æçµçã«requireïŒ 'child_process'ïŒãexecã䜿çšããŠcurlãåŒã³åºãããšã«ãã£ãŠåé¡ãåé¿ããŸããã å ¥åããŠãŒã¶ãŒã©ã³ãããã®ãã®ã§ããå Žåã¯ãå ¥åãé©åã«ãµãã¿ã€ãºããããã«ããŠãã ããã
google.com => hostnameïŒ 'google.com'ã«ãªã¯ãšã¹ãããŠãæ©èœãããã©ããã確èªããŠãã ããã
ç§ã®å Žåããhostnameãã¯nginxã«ãã£ãŠãããã·ãšããŠåŠçãããæ¬æã空ã®ãªã¯ãšã¹ããåä¿¡ããŠââãå¿çããŸããã
ãã®ã³ãŒãã¯ãšã©ãŒã«ãªããŸãïŒ
var http = require("http");
var options = {
hostname: 'myAddressNginx',
port: 80,
path: '/',
method: 'GET',
headers: {
'Content-Type': 'text/html',
'Content-Length': Buffer.byteLength("")
}
};
var req = http.request(options, (res) => {
res.on('data', (chunk) => {console.log("%s", chunk);});
res.on('end', () => {});
});
// write data to request body
req.write("");
req.end();
ãã®ã³ãŒãã¯æ©èœããŸã
var http = require("http");
var options = {
hostname: 'myAddressNginx',
port: 80,
path: '/',
method: 'GET',
headers: {
'Content-Type': 'text/html',
'Content-Length': Buffer.byteLength("")
}
};
var req = http.request(options, (res) => {
res.on('data', (chunk) => {console.log("%s", chunk);});
res.on('end', () => {});
});
// write data to request body
req.write("abc");
req.end();
+1
ããŒã6.9.5
ããã«ã¡ã¯ã¿ããªãç§ã¯åãåé¡ãæ±ããŠããŸãã +1
幞ãã2çªç®ã®ç£èŠããŒã«å
ã§ããªã¯ãšã¹ããã䜿çšããŠããã®ã§ãåé¡ã¯æå°éã«æããããŸãã node.jsã倧奜ããªã®ã§ããã£ãŒãããã¯ãæçš¿ããŠããŸãã ç§ã®ãã£ãŒãããã¯ãåé¡ã解決ããããã®ããªãã®è©Šã¿ã«å°ã圹ç«ã€ããšãé¡ã£ãŠããŸãã
ãã®ãšã©ãŒã¯ããã©ãã£ãã¯ã®å€ãæ¬çªç°å¢ã§äžè²«ããŠçºçããŠããŸãã
ãµãŒããŒã®ãæ£ç¢ºãªãã¬ããªã«ãèµ·åãããšããneverããšãããšã©ãŒã衚瀺ãããŸãã ãšã³ããã€ã³ããåãæ¿ããããšãã§ããŸããããã©ãã£ãã¯ã®å€ãæ¬çªç°å¢ã§ã¯åžžã«ã¯ã©ã€ã¢ã³ãã«ãã®ãšã©ãŒãçºçããŸãã
{[ãšã©ãŒïŒãœã±ããããã³ã°ã¢ããããŸãã]ã³ãŒãïŒ 'ECONNRESET'}ã
ããã¯ãæ°æ¥åã«æ°ä»ããæç¶çãªãšã©ãŒãšããŠå§ãŸããç£èŠãµãŒãã¹ãäœåºŠã誀ã£ãŠèŠåããåŸ.....ãããŠããªã¯ãšã¹ããã䜿çšããªãæ¬çªãã¹ãããŒã«ã§äœåºŠããã¹ããéå§ããŸããããã§ãã®åé¡ãèŠã€ããããã«Webãæ€çŽ¢ããŸãã
ä»ãç§ã¯ãã®ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒã/ããŒãžã§ã³ã8ãæ以äžå€æŽããŠãããããããã©ããããšããªãçºçããå¯èœæ§ãããããšã«æ··ä¹±ããŠããŸãã ã§ã¯ãã¯ã©ã€ã¢ã³ãã³ãŒããå€æŽããªãã£ãå Žåãããªã¯ãšã¹ããã®äžçã§ã¯äœãå€ãã£ãã®ã§ããããã
+1
ããŒã6.9.1
ããã¯æã ããšã³ããã€ã³ããããŒã«ã«ã§ãã¹ãããããªãé«éãªæ¹æ³ã§å€ãã®ãªã¯ãšã¹ããå®è¡ãããšãã«ã®ã¿çºçããŸã...
node4ãšnode6ã§ãåãåé¡ã«çŽé¢ããŠããŸãã node0.12ã§æ£åžžã«åäœããŠããŸãã
ãããä¿®æ£ããã®ãæäŒã£ãŠãã ããã
ãã€ãã£ãhttps.requestã®äžã«åæ§ã®åé¡ã®åé¡
ããã§ãã£ãšèŠãã
以äžãè¿œå ããŠãªãã·ã§ã³ããªã¯ãšã¹ããããšããã®åé¡ããã€ãã¹ïŒä¿®æ£ïŒãããŸãã
agentOptions: {
ciphers: 'DES-CBC3-SHA'
}
ç§ã¯å·»ã蟌ãŸããååŸäžãã£ãšãããç解ããããšããŠéãããŸãã...ãªãã€ã¬ã¯ãã®ããã€ãã®å±€ãããè€éãªç°å¢ã«ãããŸããïŒ is this DNS issue? -> no way it's DNS -> definitely DNS -> no it's not
@fractalfã®äŸãèŠãŠãããããã¹ãŠãhttpsã䜿çšããŠIIS6ã§ãã¹ããããŠãããµã€ãã§ã®ã¿çºçããããšã«
éããªãã
æå·ã次ã®ããã«èšå®ããŠãããŸããããŸããã§ããã
agentOptionsïŒ{
æå·ïŒ 'DES-CBC3-SHA'
}
@aganapanããªããèŠæ±ããŠããURLã¯äœã§ããïŒ ç§ã®è§£æ±ºçã¯ãIIS6 + TLS1.0ã§ã®ãŠã§ããµã€ããã¹ãã£ã³ã°ã«é¢é£ããåé¡ã®ã¿ãä¿®æ£ããŸãã åæ§ã®ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããä»ã®åé¡ãçºçããå¯èœæ§ããããŸãã
ç§ãåãåé¡ãæ±ããŠããŸããã ngrokã䜿çšããŠãRAWãªã¯ãšã¹ãã確èªããŸããã ãŠãŒã¶ãŒå
¥åã«e2808bã®å°å·äžå¯èœãªæåãè¿œå ãããŠããããšãå€æããŸããã ã»ãšãã©ã®å Žåãã³ããŒ/貌ãä»ãããŸãã ãã®ãŠãŒã¶ãŒãæäŸããURIéšåã«encodeURIComponent()
ã䜿çšãããšãããåé¡ã¯è§£æ±ºããŸããã
ç§ãåãåé¡ãæ±ããŠããŸããã
@danielkhanç§ã¯encodeURIComponent
ã¡ãœããã䜿çšããŸããã
// this is request
{
"request": {
"debugId": 5,
"uri": "https://xxx.cdn.cn/js/information_main_27d1838a.js",
"method": "GET",
"headers": {
"user-agent": "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
"host": "xxx.cdn.cn"
}
}
}
{
"response": {
"debugId": 5,
"headers": {
"expires": "Sat, 15 Apr 2017 11:01:16 GMT",
"date": "Thu, 16 Mar 2017 11:01:16 GMT",
"content-type": "application/x-javascript; charset=utf-8",
"content-length": "49785",
"last-modified": "Sun, 12 Mar 2017 14:30:49 GMT",
"cache-control": "max-age=2592000",
"access-control-allow-origin": "*",
"accept-ranges": "bytes",
"age": "19",
"x-cache": "HIT from www.matocloud.com",
"connection": "close",
"alt-svc": "h2=\":443\""
},
"statusCode": 200
}
}
Node.js 6.10.0
ãªã¯ãšã¹ã2.72.0
ããã€ãã®ããã¯ãšã³ãçµ±åãã¹ãã®å®è¡äžã«åãåé¡ãèŠã€ãããŸãããåœç€Ÿã®è£œåã¯ãHTTPSã䜿çšããŠè€æ°ã®ãããã¯ãŒã¯ããã€ã¹ã«æ¥ç¶ããŸãããã®ã·ããªãªã§ã¯ãããã€ãã®HTTPSæ¥ç¶ã確ç«ããåããã€ã¹ã«å¯ŸããŠããã€ãã®POSTããã³GETèŠæ±ãå®è¡ããŠããŸãã
ãã¹ãç°å¢ã§åé¡ãçºçãããããåé¿çã¯HTTPæç¶çæ¥ç¶ãç¡å¹ã«ããããšConnection: close
ïŒHTTPããããŒ
chromeããã®DES-CBC3-SHA
ãœãªã¥ãŒã·ã§ã³ããããã¯ããŠããŸã
ç§ã«ãšã£ãŠãã«ãŒã«ã¯æ©èœããŠããŸããã 以åã«ã³ãã³ãã©ã€ã³ããŒã«ã«ãããã·ãèšå®ããããšããããŸãã ãããã·ãåé€ãããšæ£åžžã«åäœããããã«ãªããŸããã
ç§ã¯ãŸã ãã®åé¡ãæ±ããŠããŸãã
{ Error: socket hang up
at createHangUpError (_http_client.js:302:15)
at Socket.socketOnEnd (_http_client.js:394:23)
at emitNone (events.js:91:20)
at Socket.emit (events.js:186:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickDomainCallback (internal/process/next_tick.js:122:9) code: 'ECONNRESET' }
ã€ãã«ãããrecaptchaã§æ©èœãããããšãã§ããŸããã httpsã©ã€ãã©ãªãã€ã³ããŒãããŠäœ¿çšããå¿ èŠããããŸããã åäœããã³ãŒãã¯æ¬¡ã®ãšããã§ãã
var https = requireïŒ 'https'ïŒ;
var querystring = requireïŒ 'querystring'ïŒ;
var secret = "YOUR_KEY";
var response = RESPONSE_CODE;
var postData = "secret =" + secret + "ïŒ" + "response =" + response;
//ãªããžã§ã¯ãããæçš¿æååãäœæããŸã
var post_data = querystring.stringifyïŒ{
'compilation_level'ïŒ 'ADVANCED_OPTIMIZATIONS'ã
'output_format'ïŒ 'json'ã
'output_info'ïŒ 'compiled_code'ã
'warning_level'ïŒ 'QUIET'ã
'js_code'ïŒpostData
}ïŒ;
var options = {
ãã¹ãåïŒ ' www.google.com 'ã
ããŒãïŒ443ã
ãã¹ïŒ '/ recaptcha / api / siteverify'ã
ã¡ãœããïŒ 'POST'ã
ããããŒïŒ{
'Content-Type'ïŒ 'application / x-www-form-urlencoded'
// 'content-encoding'ïŒ 'gzip'ã
// 'æ¥ç¶'ïŒ 'éãã'
}ã
agentOptionsïŒ{
æå·ïŒ 'DES-CBC3-SHA'
}
};
var req = https.requestïŒoptionsãfunctionïŒresïŒ{
console.logïŒ 'ã¹ããŒã¿ã¹ïŒ' + res.statusCodeïŒ;
console.logïŒ 'ããããŒïŒ' + JSON.stringifyïŒres.headersïŒïŒ;
res.setEncodingïŒ 'utf8'ïŒ;
res.onïŒ 'data'ãfunctionïŒbodyïŒ{
console.logïŒ 'BodyïŒ' + bodyïŒ;
}ïŒ;
}ïŒ;
req.onïŒ 'error'ãfunctionïŒeïŒ{
console.logïŒ 'ãªã¯ãšã¹ãã®åé¡ïŒ' + e.messageïŒ;
}ïŒ;
//ãªã¯ãšã¹ãæ¬æã«ããŒã¿ãæžã蟌ã¿ãŸã
req.writeïŒpostDataïŒ;
req.endïŒïŒ;
泚ïŒã€ã³ã¿ãŒãããã§ç¹å®ã®ãšã©ãŒã¡ãã»ãŒãžãæ€çŽ¢ãããšãã«ããã®ãã£ã¹ã«ãã·ã§ã³ã«ééããå¯èœæ§ã®ããä»ã®äººã®ããã«ãããèšé²ããŸãã
ãšã©ãŒã¯ã¯ã©ã€ã¢ã³ããµã€ããåå ã§ã¯ãªããããäžèšã®èª¬æã®ã»ãšãã©ã¯èŠç¹ãèŠéããŠããããã request
ã«å¯ŸããŠå¥ã®ãåé¿çããè©ŠããŠãæ©èœããªãå¯èœæ§ããããŸãã åé¡ã¯ãããã¯ã°ã©ãŠã³ãæäœã®é
延ãé·ãããããµãŒããŒåŽã®HTTPèŠæ±ãœã±ãããã¢ã€ãã«ã¿ã€ã ã¢ãŠãã«ãªãããœã±ãããéããããšã§ãã ãã®çµæãã¯ã©ã€ã¢ã³ãåŽã§ECONNRESETãçºçããŸãã
ãµãŒããŒåŽã®ãœãŒã¹ã³ãŒããæ åœããexpress / koaãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããå Žåã¯ãé·æçãªããã¯ãšã³ãæäœãéå§ããåã«ãHTTPãªã¯ãšã¹ããœã±ããã®ã¢ã€ãã«ã¿ã€ã ã¢ãŠããç¡å¹ã«ããå¿ èŠããããŸãã ããšãã°ãES6ã³ã¢ã«ãŒããã³ãã©ãŒã®å ŽåïŒ
javascript
ctx => {
....
ctx.socket.setTimeout(0);
// now trigger the long lasting backend operation
....
}
ä»ç§ã®ã¯ã©ã€ã¢ã³ãã®ã¿ã€ã ã¢ãŠãã®åé¡ã¯ãã¯ã©ã€ã¢ã³ãã®ã³ãŒãå ã®ä»»æã®è¡ãå€æŽããã«ãªããªã£ãŠããŸã...
httpsãŸãã¯httpã®ããããã§æ£ããSSLã䜿çšããŠURLãåŒã³åºããŠããããšã確èªããŠãã ãã
ç§ã®å Žåãããã¯ãããã·ã®åé¡ã§ããããŸãã http_proxyãšhttps_proxyããªã»ãããããšãåé¡ã¯è§£æ±ºããŸãã
ç§ãåãåé¡ãæ±ããŠããŸããã
ã«ãŒã«ã®å ŽåïŒ
HTTP/1.1 200 OK
ãã€ãã£ãhttpã¢ãžã¥ãŒã«ã®å ŽåïŒ
{ [Error: socket hang up] code: 'ECONNRESET' }
ãªã¯ãšã¹ãã¢ãžã¥ãŒã«ã®å ŽåïŒ
{ [Error: socket hang up] code: 'ECONNRESET' }
ãã®çç±ã¯ãç¹ã«httpãããã³ã«ã®æ§æãééã£ãŠããå Žåã«å¿çããããã§ãã
\n
èšå·ã¯ãã¹ãŠã®ããããŒã®åŸã«ãããŸããã \r\n
ã§ããå¿
èŠããããæåŸã®ããããŒã®åŸã«ãããŸã- \r\n\r\n
ã
ä¿®æ£ãããšãšã©ãŒã¯ãªããªããŸããã
ããã¯èª°ãã®ããã«æçšã§æéãç¯çŽãããããããŸããã
ç§ãåãåé¡ãæ±ããŠããŸããã ç§ã®å Žåããªã¯ãšã¹ããªãã·ã§ã³ã®ããããŒã«User-Agentãèšå®ãããšãåé¡ã¯çºçããªããªããŸããã
Node8.xã§åãåé¡ãçºçããŠãã
+1
ããŒã8.1.2
"ãªã¯ãšã¹ã"ïŒ "= 2.81.0"
{
"method": "GET",
"json": true,
"uri": "http://www.bb.com/xxxxxxxxxxx",
"baseUrl": null,
"headers": {
"cookie": "yyyyy",
"user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60"
},
"qs": {
"app_version": "1.9.8.8",
"env": "prod"
}
}
//res
Error: socket hang up
InternalServerError: Internal Server Error
// setting
var _request = require('request').defaults({
forever : true,
maxRedirects : 8
}),
åããšã©ãŒãçºçããŸããããå°ãç°ãªããŸããç§ã®ç¶æ³ã¯æ¬¡ã®ããã«ãªããŸãã
testapp-> api A-> api B
->ã¯ãªã¯ãšã¹ããæå³ããŸã
ãã¹ãã¢ããªã¯ãAãBãéåžžã«ãã£ãããšèŠæ±ãããšããã³ã°ã¢ãããšã©ãŒãåãåããæçµçã«Bãã500ãšã©ãŒãåãåããŸãïŒãšã©ãŒã¯API Aã§åŠçãããŸãïŒã
API Aã¯å€ãã®ããšãè¡ããåžžã«å¿çãéåžžã«é
ããªããŸããããšã©ãŒã¯çºçããªããããã¿ã€ã ã¢ãŠãã®åé¡ã§ã¯ãªããšç¢ºä¿¡ããŠããŸãã
ãšã¯ã¹ãã¬ã¹ãšãªã¯ãšã¹ããã©ã®ããã«æ©èœãããæ¬åœã«æ··ä¹±ããŠããŸãã500ãšã©ãŒã¯ãã§ã«APIAã«ãã£ãŠåŠçãããŠãããä»ã®ã¢ã¯ã·ã§ã³ããã©ããŒã¢ãããããŠããŸãã ãã¹ãã¢ããªã§ãœã±ãããã³ã°ã¢ãããšã©ãŒãçºçããã®ã¯ãªãã§ããïŒ
ææ°ã®7.xãªãªãŒã¹ã ãã§ãªããææ°ã®ããŒãïŒ8.6ïŒã§ããã®åé¡ãçºçããŠããŸãã 誰ãããããçªãåºãããå Žåã®è©³çŽ°ã¯ããã«ãããŸãïŒ https ïŒ
è¿œå æ å ±ãããã°æããŠãã ããïŒ
ããŒã6.10.0ã§åãåé¡ãçºçãã
å¥ã®èãããã説æïŒContent-LengthããããŒã§æå®ãããŠãããããå€ãã®ããŒã¿ãHTTPããã£ã§éä¿¡ããŠããŸã
+1
ããŒã8.6.0
ãã®åé¡ãä¿®æ£ããã«ã¯ã次ã®ããšãè¡ãå¿
èŠããããŸãã
1-process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"ãè¿œå ããŸãã
2-zone.jsãv0.7.4ã«ã¢ããã°ã¬ãŒãããŸã
åãåé¡ãçºçããŸããã解決çã¯ãç°å¢å€æ°NO_PROXY = "yourcompany.com"ãšstrictSSLïŒfalseã䜿çšããããšã§ãããããã¯ã瀟å ã®URLã«å¯ŸããŠãªã¯ãšã¹ããè¡ããããããã·ãµãŒããŒã䜿çšããããšããããã§ãã program.env.NO_PROXY = "yourcompany.com"ãããã°ã©ã ã§äœ¿çšã§ããŸãã
+1
ããŒã8.8.1
at createHangUpError (_http_client.js:329:15)
at Socket.socketOnEnd (_http_client.js:421:23)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1056:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9) code: 'ECONNRESET' }
ç§ã®åŽã®åé¡ã¯ãVagrantãããŒãããå æãããŠããŠã GET
ãªã¯ãšã¹ãã®çŽåŸã«FIN
ãã©ã°ä»ãã®TCPãã±ãããéä¿¡ããŠããããš
ãã®åé¡ãçºçããŸãããGZIPããªã³ã§ãKeepaliveããªã³ã§ããã
ããã±ãŒãžãè¿œå ãããšãåé¡ã¯è§£æ¶ãããŸããã
const zlib = require('zlib'); // for GZIP
const http = require('http');
const https = require('https');
åãåé¡-URLãããŒã«ã«ãã¹ããããã¹ããã·ã³ã®å®éã®IPã«å€æŽããããšã§ä¿®æ£ãããŸãã
ãŸã ãã®åé¡ããããŸã....æãããªçç±ã¯ãããŸããã
info: Error: socket hang up
at createHangUpError (_http_client.js:345:15)
at Socket.socketOnEnd (_http_client.js:437:23)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1059:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
ããã«ã¡ã¯ãããªãããã®åé¡ããŸã 解決ãããã©ããã¯ããããŸããããç§ã¯ãã®ããã¡ãã解決ããŸãããç§ããããã°ãããšããç§ã¯èŠã€ããŸãã
// Using native http
let postData = querystring.stringify(data);
...
req.write(postData);
ãªã¢ãŒããµãŒããŒãkoaïŒãŸãã¯å¥ã®nodejsãµãŒããŒïŒã«ãã£ãŠèµ·åãããããŒã¿ã{}
å Žåãstringifyé¢æ°ã«ããpostData
ã¯{}
ã«å€æãããŸãããkoaãµãŒããŒã¯{}
ã¯parser error
ãã¹ããŒããããããã®ãªã¯ãšã¹ãã¯æ¬¡ã®ãšã©ãŒãã¹ããŒããŸãã
Error: socket hang up
at createHangUpError (_http_client.js:345:15)
at Socket.socketOnEnd (_http_client.js:437:23)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1059:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
ã ããç§ã¯ãããããŸããïŒ__ postData = postData === '{}'ïŒ ''ïŒpostData__
ãããããªããå©ããããšãã§ããããšãé¡ã£ãŠããŸã
ç§ã®å Žåãããã¯ãªã¯ãšã¹ãããããŒã«content-length : 0
ãå«ãPOST
ãªã¯ãšã¹ããéä¿¡ããŠãããšãã«çºçããŸãã ãã®çµæã劥åœãã©ããã¯ããããŸããããå°ãªããšããè¿œå ããããããŒã®åé
ç®ãåé€ããŠãåé¡ã®çç±ãèŠã€ããããšãã§ãããšæããŸãã
ãGETãããPOSTãã«å€æŽããããä¿®æ£ããŸãã ããããçç±ã¯ããããŸãããhttpsïŒ//cnodejs.org/topic/57a6c35282e6ea4870ecd3f2ããä¿®æ£ããŸããres.on('data', cb)
@LvChengbin POST
ãªã¯ãšã¹ãã§ãåãåé¡ã«çŽé¢ããŠããŸããã Content-Length : 0
ãå®éã®äœã®é·ãã«çœ®ãæãããšããŸããããŸããã
誰ããç§ãæã£ãŠãããŸãïŒangelïŒ
bodev.8.9ã§ãåãåé¡ããããŸã
{ãšã©ãŒïŒãœã±ããããã³ã°ã¢ããããŸãã
createHangUpErrorïŒ_http_client.jsïŒ331ïŒ15ïŒã§
Socket.socketOnEndïŒ_http_client.jsïŒ423ïŒ23ïŒã§
EmmitNoneã§ïŒevents.jsïŒ111ïŒ20ïŒ
Socket.emitã§ïŒevents.jsïŒ208ïŒ7ïŒ
endReadableNTã§ïŒ_stream_readable.jsïŒ1064ïŒ12ïŒ
_combinedTickCallbackïŒinternal / process / next_tick.jsïŒ138ïŒ11ïŒã§
process._tickCallbackïŒinternal / process / next_tick.jsïŒ180ïŒ9ïŒã³ãŒãã§ïŒ 'ECONNR
ESET '}
ç§ã®ã³ãŒãã¯ä»¥äžã®éãã§ãã
let request = requireïŒ "request"ïŒ;
ãªã¯ãšã¹ãïŒ{
urlïŒ " http://192.168.31.29ïŒ3019 / tactics / createMediaHotTotal20"ã
ã¡ãœããïŒ "GET"ã
jsonïŒæ¬åœã
ããããŒïŒ{
"content-type"ïŒ "application / json"
}ã
}ãé¢æ°ïŒãšã©ãŒãå¿çãæ¬æïŒ{
ifïŒãšã©ãŒïŒ{
console.logïŒãšã©ãŒïŒ
} ããä»¥å€ {
resolveïŒbodyïŒ;
}
}ïŒ
åãåé¡ãããŒãv9.5.0
const https = require("https");
const fs = require("fs");
process.env.NO_PROXY="yourcompany.com";
const options = {
hostname: "en.wikipedia.org",
port: 443,
path: "/wiki/George_Washingtons",
method: "POST",
// ciphers: 'DES-CBC3-SHA'
};
const req = https.request(options, (res) => {
let responseBody = "";
console.log("Response started");
console.log(`Server Status: ${res.statusCode} `);
console.log(res.headers);
res.setEncoding("UTF-8");
res.once("data", (chunk) => {
console.log(chunk);
});
res.on("data", (chunk) => {
console.log(`--chunk-- ${chunk.length}`);
responseBody += chunk;
});
res.on("end", () => {
fs.writeFile("gw.html", responseBody, (err) => {
if (err) throw err;
console.log("Downloaded file");
});
});
});
req.on("error", (err) => {
console.log("Request problem", err);
});
Request problem { Error: socket hang up
at createHangUpError (_http_client.js:330:15)
at TLSSocket.socketOnEnd (_http_client.js:423:23)
at TLSSocket.emit (events.js:165:20)
at endReadableNT (_stream_readable.js:1101:12)
at process._tickCallback (internal/process/next_tick.js:152:19) code: 'ECONNRESET' }
md5-988987fef0feed585119ccc2fe5450ba
~/node-training> npm config ls -l
; cli configs
long = true
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/6.1.0 node/v9.5.0 darwin x64"
; userconfig /Users/katsanos/.npmrc
strict-ssl = false
; default values
access = null
allow-same-version = false
also = null
always-auth = false
audit = true
auth-type = "legacy"
bin-links = true
browser = null
ca = null
cache = "/Users/katsanos/.npm"
cache-lock-retries = 10
cache-lock-stale = 60000
cache-lock-wait = 10000
cache-max = null
cache-min = 10
cafile = undefined
cert = null
cidr = null
color = true
commit-hooks = true
depth = null
description = true
dev = false
dry-run = false
editor = "vi"
engine-strict = false
fetch-retries = 2
fetch-retry-factor = 10
fetch-retry-maxtimeout = 60000
fetch-retry-mintimeout = 10000
force = false
git = "git"
git-tag-version = true
global = false
global-style = false
globalconfig = "/usr/local/etc/npmrc"
globalignorefile = "/usr/local/etc/npmignore"
group = 1493692218
ham-it-up = false
heading = "npm"
https-proxy = null
if-present = false
ignore-prepublish = false
ignore-scripts = false
init-author-email = ""
init-author-name = ""
init-author-url = ""
init-license = "ISC"
init-module = "/Users/katsanos/.npm-init.js"
init-version = "1.0.0"
json = false
key = null
legacy-bundling = false
link = false
local-address = undefined
loglevel = "notice"
logs-max = 10
; long = false (overridden)
maxsockets = 50
message = "%s"
; metrics-registry = null (overridden)
no-proxy = null
node-options = null
node-version = "9.5.0"
offline = false
onload-script = null
only = null
optional = true
otp = null
package-lock = true
package-lock-only = false
parseable = false
prefer-offline = false
prefer-online = false
prefix = "/usr/local"
production = false
progress = true
proxy = null
read-only = false
rebuild-bundle = true
registry = "https://registry.npmjs.org/"
rollback = true
save = true
save-bundle = false
save-dev = false
save-exact = false
save-optional = false
save-prefix = "^"
save-prod = false
scope = ""
script-shell = null
scripts-prepend-node-path = "warn-only"
searchexclude = null
searchlimit = 20
searchopts = ""
searchstaleness = 900
send-metrics = false
shell = "/usr/local/bin/fish"
shrinkwrap = true
sign-git-tag = false
sso-poll-frequency = 500
sso-type = "oauth"
; strict-ssl = true (overridden)
tag = "latest"
tag-version-prefix = "v"
timing = false
tmp = "/var/folders/kn/3cnpbcsx60n4fx_jv6sf4l80_mdkps/T"
umask = 18
unicode = true
unsafe-perm = true
usage = false
user = 356960985
; user-agent = "npm/{npm-version} node/{node-version} {platform} {arch}" (overridden)
userconfig = "/Users/katsanos/.npmrc"
version = false
versions = false
viewer = "man"
ç·šéïŒ req.end()
ããããŸãã
åããã°ããããŸãã POSTã¯ãContent-Lengthããªã¯ãšã¹ãã«è¿œå ããããšãã«æ©èœããŸãã ãããçããã®ã圹ã«ç«ãŠã°å¹žãã§ãã
'Content-Length'ïŒBuffer.byteLengthïŒdataïŒ// POSTã«ã¯Content-Lengthãå¿
èŠã§ã
ç§ã®å Žåã
Connection: keep-alive
ããããŒãèšå®ããããšã§ãåé¡ãåé¿ããããšãã§ããŸããã
ç§ã®æ¥ãæãïŒ
å°ãæããŸãã
nodejsãµãŒããŒã«POSTãéä¿¡ãããšãã«ããªã¯ãšã¹ãã«é¢ããåé¡ãé±ã«1åçºçããŸãã
ãã£ãããŒã«è¡ã£ãåŸããªã¯ãšã¹ãã®åœ¢åŒãæ£ãããªããšãnodejsãæ¥ç¶ããã³ã°ãããã ãã§ããããšãããããŸããã
POSTãªã¯ãšã¹ããhttp.requestã«æž¡ããããšããªã¢ãã°ãçºçããããã§ã
ç§ã®å Žåãæ¬æã¯æåŸã®èšå·ãªãã§éä¿¡ãããŸãããã setContentLength()
ã®Content-Lengthã®èª€ç®ãåå ã§ããå¯èœæ§ããããŸã
ãhttpsããããã³ã«ã®ä»£ããã«ãhttpãã䜿çšãããšãåé¡ã解決ããŸãã
ããã¯éåžžã«èç«ãããããšã§ãã ãµãŒããŒãå¶åŸ¡ã§ããŸããããNodejsããïŒãªã¯ãšã¹ããŸãã¯ã¹ãŒããŒãšãŒãžã§ã³ãã䜿çšããŠïŒPOSTãå®è¡ã§ããŸããããcurlãŸãã¯Postmanãæ£åžžã«å®è¡ã§ããŸãã ããã«ã¯ã¬ã€ãžãŒãªããšã«ãrequestã¹ããŒãã¡ã³ãã§ãããã¬ãŒã䜿çšããŠäžæåæ¢ããç¶è¡ãããšãåŒã³åºãã¯æåããŸãã
ç§ã®å ŽåããHostãããããŒãåé€ããŠè§£æ±ºããŸããã
æ°ããnodejsïŒ 10.16.3
ïŒã«ã¢ããã°ã¬ãŒãããåŸããã®åé¡ãçºçããŸããã ã¯ã©ã€ã¢ã³ãåŽã§ã¯ã keepAlive: true
nodejshttpãšãŒãžã§ã³ãã䜿çšããŸããã 次ã®ããšãèµ·ãã£ãããã§ãã
解決
ãããŸã§ã®ãšããã2ã€ã®è§£æ±ºçãèŠã€ãããŸããã
1ïŒãµãŒããŒåŽã§keepAliveTimeout
ã0
ãšçããèšå®ããŠç¡å¹ã«ããŸã
2ïŒ keepAliveTimeout
æªæºã®å€ïŒããã©ã«ãã§ã¯5ç§ïŒã§ç©ºããœã±ãããéããŸãã ããã©ã«ãã®httpãšãŒãžã§ã³ãã¯ãã®ãããªæ©èœããµããŒãããŠããŸããïŒ timeout
èšå®ã¯ãµããŒãããŠããŸããïŒã ããã§ã agentkeepalivelibã䜿çšã
const HttpsAgent = require('agentkeepalive').HttpsAgent;
const agent = new HttpsAgent({
freeSocketTimeout: 4000
});
let req = http.get(options, (res) => {
...........
...........
}).on('error', function(e) {
console.error(e);
});
ãããè©ŠããŠã
åæ§ã®åé¡ã«çŽé¢ããŠããŸããçŸåšã6.11.xã䜿çšããŠããŸãããããŒã10ãè©ŠããŸãããã圹ã«ç«ã¡ãŸããã
ãªã¯ãšã¹ãã¢ãžã¥ãŒã«ãã¢ããã°ã¬ãŒãããŠãæäŸããããã¹ãŠã®ææ¡ãè¿œå ããããšããŸããããå©ãã«ã¯ãªããŸããã§ããã
ãã®ä»ã®ã¢ã€ãã¢ããã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ãã«ãã
ãã®åé¡ã解決ããããšãã§ããŸã-APIã²ãŒããŠã§ã€ã«ã¯ããã®åé¡ã®åå ãšãªãã¿ã€ã ã¢ãŠãèšå®ããããŸããã 調ã¹ãŠãããŠããããšãã
ãã®åé¡ã解決ããããšãã§ããŸã-APIã²ãŒããŠã§ã€ã«ã¯ããã®åé¡ã®åå ãšãªãã¿ã€ã ã¢ãŠãèšå®ããããŸããã 調ã¹ãŠãããŠããããšãã
ããã«ã¡ã¯ããã®åé¡ã®åå ãšãªãã¿ã€ã ã¢ãŠãèšå®ã®çš®é¡ãæããŠãã ãã
chai-httpã䜿çšããŠã«ãŒãããã¹ãããŠãããšãã«ãåãåé¡ãçºçããŸãã ã°ãããŠããã®ã¯ãæåã®3ã€ã®ãã¹ã倧äžå€«ã ãšããããšã§ã!! ç§ã¯äžæ¥äžããã«çŽé¢ããããšããŠããŸã
ããã«ç§ã®ã³ãŒãïŒ
`` `
logïŒ "äœæ¥ãã¹ã"ïŒ
itïŒ "/ loginã«ãŒãããã¹ããã"ãdone => {
ãã£ã€
.requestïŒãµãŒããŒïŒ
.postïŒ "/ login"ïŒ
ãéä¿¡ïŒ{ }ïŒ
.endïŒfunctionïŒerrãresïŒ{
expectïŒerrïŒ.to.be.null;
expectïŒres.statusïŒ.to.not.equalïŒ404ïŒ;
expectïŒres.body.messageïŒ.to.not.be.equalïŒ "èŠã€ãããŸãã"ïŒ;
çµããïŒïŒ;
}ïŒ;
}ïŒ;
ãã°ïŒãšã©ãŒã§ãã¹ãã«å€±æïŒãœã±ããããã³ã°ã¢ããïŒ
itïŒ '/ getResetCodePasswordã«ãŒãããã¹ããã'ãïŒå®äºïŒ=> {
ãã£ã€
.requestïŒãµãŒããŒïŒ
.patchïŒ "/ getResetCodePassword"ïŒ
ãéä¿¡ïŒ{ }ïŒ
.endïŒïŒerrãresïŒ=> {
console.logïŒerrïŒ;
çµããïŒïŒ;
}ïŒ
}ïŒ
`` `
æãåèã«ãªãã³ã¡ã³ã
誰ããç§ãæã£ãŠãããŸãïŒangelïŒ