我正在尝试使用node.js执行POST请求,但似乎总是超时。我也尝试用PHP中的cURL做请求,以确保并且工作正常。此外,在我的本地服务器(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 );
}
?>
这里发生了什么?
答案 0 :(得分:3)
您正在将标头传递给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();