2016-12-06 11 views
0

POST私のサーバーのAPIエンドポイントに接続しようとしています。 Advanced REST Clientを使用すると、ヒットしてJSON応答を期待どおりに取得できるため、エンドポイントが機能することがわかります。問題は、キーと値のペアが含まれているrequest.write(postData)を呼び出しても、要求の本文にデータが送信されていないようです。本文にこのデータが送信されていなければ、私のサーバーはこの情報がなくても予想どおり401エラーを返します。 POSTサーバー側の内容を印刷するのは空ですが、なぜ空であるのかはわかりません。HTTPSリクエストがRESTリクエストの本文を投稿していません

var postData = querystring.stringify({ 
     "access_token" : accessToken, 
     "id": applianceId 
    }); 

    var serverError = function (e) { 
     log("Error", e.message); 
     context.fail(generateControlError(requestName, "DEPENDENT_SERVICE_UNAVAILABLE", "Unable to connect to server")); 
    }; 

    var callback = function(response) { 
     var str = ""; 

     response.on("data", function(chunk) { 
      str += chunk.toString("utf-8"); 
     }); 

     response.on("end", function() { 
      result = generateResult(CONTROL, requestName.replace("Request", "Confirmation"), messageId); 

      context.succeed(result); 
     }); 

     response.on("error", serverError); 
    }; 

var options = { 
    hostname: REMOTE_CLOUD_HOSTNAME, 
    port: 443, 
    path: REMOTE_CLOUD_BASE_PATH + "/" + endpoint, 
    method: "POST", 
    headers: { 
     "Content-Type": "application/x-www-form-urlencoded" 
    } 
}; 

var request = https.request(options, callback); 

request.on("error", serverError); 

//This doesn't seem to write anything since if I print out the POST 
//data server-side it's empty; however, if I print out the value of 
//postData here, it looks as expected: 'access_token=xxxxx' 
request.write(postData); 

request.end(); 

答えて

0

もう一度httpbin.org/postのコードをテストしているようですが、動作しているようです。 私はあなたがapplication/jsonなく「application/x-www-form-urlencoded

をPOSTする必要があることに関連する問題は、JSON文字列にPOSTDATAを変更しよう、そして、ヘッダに

​​

を変更してみてくださいと信じています:

var postData=JSON.stringify({access_token:"xxxxx"}) 

送信成功した問題と問題がローカルでないこと(サーバーに問題がある可能性があります)を確認するには、ターゲットをミラーURLに変更します。

var options = { 
    hostname: "httpbin.org", 
    path:'/post', 
    port: 443, 
    method: "POST",  
    headers: { 
     "Content-Type": "application/json" 
    } 
}; 

あなたNodeJSのバージョンに問題がない場合は、あなたが取得する必要応答である:(サーバーがポストされたデータを得たことを意味している)

{ 
    "args": {}, 
    "data": "{\"access_token\":\"xxxxx\"}", 
    "files": {}, 
    "form": {}, 
    "headers": { 
    "Content-Length": "24", 
    "Content-Type": "application/json", 
    "Host": "httpbin.org" 
    }, 
    "json": { 
    "access_token": "xxxxx" 
    }, 
    "origin": "5.29.63.30", 
    "url": "https://httpbin.org/post" 
} 

ところで:私は本当にあなたが移動することをお勧めしますあなたの要求を管理するためのライブラリへ:

+0

おかげで同じコードを書くことが好きな人のために。残念ながら、問題はARCの現在のコンテンツタイプで作業しているため、JSONに切り替えることで解決されません。 AWS上で動作しているので、サーバに問題があるとは思わない。私の実装では何らかの理由で投稿データが送信されていないようです。 – roundtheworld

+0

あなたの実装をテストしました。それが働いています。したがって、あなたが投稿したコードとは関係ありません – Aminadav

関連する問題