POST-запрос node.js не выполняется - PullRequest
2 голосов
/ 03 июня 2011

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

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 );
    }
?>

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

1 Ответ

3 голосов
/ 03 июня 2011

Вы передаете заголовки вызову 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();
...