2017-03-11 6 views
0

現在、AWS Lambdaを使用しているAlexaスキルで作業しています。サーバーにHTTP param/customヘッダーを正常にPOSTできないようです。情報を完全に取得することはできますが、なぜパラメータ/カスタムヘッダーを送信しないのかわかりません。 HTTP POSTリクエストを送信するためのカスタムヘッダーを含むHTTP POSTを外部サーバーに送信できません

私のコードは次のようになります。

function httpGetMall(latitude, longitude, callback) { 

    var options = { 
     host: 'myserver.com', 
     path: '/path/to/script.php', 
     auth: 'myAuthenticationPassword'.toString('base64'), 
     method: 'POST', 
     headers: {'latitude': latitude.toString(), 'longitude': longitude.toString()} 
    }; 

    var req = http.request(options, (res) => { 

     var body = ''; 

     res.on('data', (d) => { 
      body += d; 
     }); 

     res.on('end', function() { 
      callback(body); 
     }); 

    }); 
    req.end(); 

    req.on('error', (e) => { 

    }); 
} 

私はそれが完全にコールバックにデータを返すよう関数は、正しく呼び出されている事実を知っています。

私のPHPスクリプトでは、私はそうのような値をつかむしようとしています:

$latitude = $_POST['latitude']; 
$longitude = $_POST['longitude']; 

私は、彼らが渡され取得されていないかどうかを確認するために、関数の内部緯度と経度を設定し、手動で試してみましたが、しかし、サーバーはそれをまだ受信していません。

ご協力いただければ幸いです。ありがとう!

+2

POSTデータがヘッダーで送信されていないことを認識していますか。これは、コード化された文字列として本文に送信されます。おそらくあなたのPHPがそれを見つけようとしているところでしょうが、node.jsでPOSTリクエストを作成するときにデータを適切な場所に置かなかったのです。 – jfriend00

+0

@ jfriend00ああ、私はそれを認識しませんでした。データをエンコードされた文字列として本体に送信するにはどうすればよいですか?私はNodeJSとネットワーキングが初めてです。私の用語が間違っていると、すみません。 –

+0

私は答えでそれを行う方法を示しました。 – jfriend00

答えて

1

POSTデータはヘッダーで送信されません。これは、コード化された文字列として本文に送信されます。あなたのコードでは、正しくエンコードしてreq.write()で送信します。ノードコードdoc for http.request()にPOSTコードの例があります。ここで

は、あなたがそれを正しく行うには、あなたのコードを修正することができる方法は次のとおりです。

var querystring = require('querystring'); 

function httpGetMall(latitude, longitude, callback) { 

    var options = { 
     host: 'myserver.com', 
     path: '/path/to/script.php', 
     auth: 'myAuthenticationPassword'.toString('base64'), 
     method: 'POST', 
    }; 

    var req = http.request(options, (res) => { 

     var body = ''; 

     res.on('data', (d) => { 
      body += d; 
     }); 

     res.on('end', function() { 
      callback(null, body); 
     }); 

    }); 

    req.on('error', (e) => { 
     callback(e); 
    }); 

    // format the data appropriately for the POST body 
    var postData = querystring.stringify({latitude: latitude, longitude: longitude}); 
    // write the POST body 
    req.write(postData); 
    req.end(); 
} 

注:また、適切なエラー処理を追加する必要があります。おそらく、最初の引数としてエラーを受け取り、2番目の引数としてデータを取る典型的なnodejs非同期コールバックにコールバックを行うべきでしょう。その後、エラーが発生した場合はcallback(err)に、応答データを受け取った場合はcallback(null, body)に電話をかけることができます。私はこれを表示するために私の答えを変更しました。

関連する問題