2017-03-11 3 views
0

Ich arbeite derzeit an einer Alexa-Fähigkeit mit AWS Lambda, und alles funktioniert perfekt, bis auf eine Sache. Ich kann nicht scheinen, HTTP-Parameter/benutzerdefinierte Header erfolgreich an meinen Server zu senden. Es kann die Informationen perfekt abrufen, aber ich kann nicht herausfinden, warum es die Parameter/benutzerdefinierten Header nicht sendet.HTTP-POST mit benutzerdefinierten Headern kann nicht an externen Server gesendet werden

Mein Code eine HTTP POST-Anforderung für das Senden wie folgt aussieht: perfekt

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) => { 

    }); 
} 

ich für eine Tatsache wissen, ist die Funktion korrekt aufgerufen wird, da sie die Daten auf Rückruf zurückgibt.

Auf meinem PHP-Skript, ich bin versucht, die Werte wie so zu greifen:

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

ich manuell haben versucht, innerhalb der Funktion die Breiten- und Längeneinstellung zu sehen, ob sie nicht weitergegeben wurden in immer, aber die Server hat sie immer noch nicht erhalten.

Jede Hilfe würde sehr geschätzt werden. Vielen Dank!

+2

Ist Ihnen klar, dass POST-Daten nicht in Headern gesendet werden? Es wird als kodierte Zeichenfolge im Körper gesendet. Das ist wahrscheinlich, wo Ihr PHP erwartet, es zu finden, aber Sie haben die Daten nicht an der richtigen Stelle beim Erstellen der POST-Anfrage in node.js gelegt. – jfriend00

+0

@ jfriend00 Oh, das habe ich nicht bemerkt. Wie würde ich die Daten als eine codierte Zeichenfolge im Körper senden? Ich bin neu in NodeJS und im Netzwerk, es tut mir leid, wenn meine Terminologie falsch ist. –

+0

Ich habe dir gezeigt, wie man es in einer Antwort macht. – jfriend00

Antwort

1

POST-Daten werden nicht in Kopfzeilen gesendet. Es wird als codierte Zeichenfolge im Körper gesendet. In Ihrem Code würden Sie es richtig codieren und dann mit req.write() senden. Es gibt ein POST-Codebeispiel im Knoten doc for http.request().

Hier ist, wie Sie Ihren Code ändern könnte es richtig zu machen:

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

Hinweis: Sie müssen auch die richtige Fehlerbehandlung hinzufügen. Wahrscheinlich sollten Sie Ihren Callback zu einem typischen async-Callback von nodejs machen, der einen Fehler als erstes Argument und Daten als zweiten akzeptiert. Dann können Sie einfach callback(err) aufrufen, wenn Sie einen Fehler erhalten, und callback(null, body), wenn Sie die Antwortdaten erhalten. Ich habe meine Antwort geändert, um dies auch zu zeigen.

Verwandte Themen