Intereting Posts

Не удалось выполнить запрос POST узла.js

Я пытаюсь выполнить запрос POST с node.js, но всегда кажется, что тайм-аут. Я также попытался выполнить запрос с cURL на PHP, чтобы убедиться, и это работает нормально. Кроме того, при выполнении одного и того же запроса на моем локальном сервере (127.0.0.1) вместо удаленного сервера он отлично работает.

Node.js:

var postRequest = { host: "www.facepunch.com", path: "/newreply.php?do=postreply&t=" + threadid, port: 80, method: "POST", headers: { Cookie: "cookie", 'Content-Type': 'application/x-www-form-urlencoded' } }; buffer = ""; var req = http.request( postRequest, function( res ) { console.log( res ); res.on( "data", function( data ) { buffer = buffer + data; } ); res.on( "end", function() { require( "fs" ).writeFile( "output.html", buffer ); } ); } ); var body = "postdata\r\n"; postRequest.headers["Content-Length"] = body.length; req.write( body ); req.end(); 

cURL и PHP

 <?php if ( $_SERVER["REMOTE_ADDR"] == "127.0.0.1" ) { $body = "body"; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, "http://www.facepunch.com/newreply.php?do=postreply&t=" . $threadid ); curl_setopt( $ch, CURLOPT_POST, 15 ); curl_setopt( $ch, CURLOPT_POSTFIELDS, $body ); curl_setopt( $ch, CURLOPT_COOKIE, "cookie" ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); $result = curl_exec( $ch ); curl_close( $ch ); } ?> 

Что здесь происходит?

Вы передаете заголовки на запрос запроса http, а затем пытаетесь добавить заголовок Content-Length после факта. Вы должны делать это, прежде чем передавать значения, так как это изменяет способ настройки HTTP-запроса Transfer-Encoding :

 var body = "postdata"; var postRequest = { host: "www.facepunch.com", path: "/newreply.php?do=postreply&t=" + threadid, port: 80, method: "POST", headers: { 'Cookie': "cookie", 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(body) } }; var buffer = ""; var req = http.request( postRequest, function( res ) { console.log( res ); res.on( "data", function( data ) { buffer = buffer + data; } ); res.on( "end", function() { require( "fs" ).writeFile( "output.html", buffer ); } ); } ); req.write( body ); req.end();