Wie erstelle ich einen https-Beitrag in Node Js ohne ein Modul eines Drittanbieters?


74

Ich arbeite an einem Projekt, für das https get- und post-Methoden erforderlich sind. Ich habe eine kurze https.get-Funktion, die hier funktioniert ...

const https = require("https");

function get(url, callback) {
    "use-strict";
    https.get(url, function (result) {
        var dataQueue = "";    
        result.on("data", function (dataBuffer) {
            dataQueue += dataBuffer;
        });
        result.on("end", function () {
            callback(dataQueue);
        });
    });
}

get("https://example.com/method", function (data) {
    // do something with data
});

Mein Problem ist, dass es keine https.post gibt und ich die http-Lösung hier bereits mit dem https-Modul ausprobiert habe. Wie erstelle ich eine HTTP-POST-Anfrage in node.js? Gibt aber Konsolenfehler zurück.

Ich hatte kein Problem damit, get und post mit Ajax in meinem Browser auf derselben API zu verwenden. Ich kann https.get verwenden, um Abfrageinformationen zu senden, aber ich denke nicht, dass dies der richtige Weg ist, und ich denke nicht, dass es funktionieren wird, Dateien später zu senden, wenn ich mich für eine Erweiterung entscheide.

Gibt es ein kleines Beispiel mit den Mindestanforderungen, um eine https.-Anfrage zu stellen, was wäre eine https.post, wenn es eine gäbe? Ich möchte keine npm-Module verwenden.



2
@congusbongus: nicht genau, weil diese Frage über HTTPS ist, anders als HTTP ...
Didier68

Antworten:


174

Zum Beispiel so:

const querystring = require('querystring');
const https = require('https');

var postData = querystring.stringify({
    'msg' : 'Hello World!'
});

var options = {
  hostname: 'posttestserver.com',
  port: 443,
  path: '/post.php',
  method: 'POST',
  headers: {
       'Content-Type': 'application/x-www-form-urlencoded',
       'Content-Length': postData.length
     }
};

var req = https.request(options, (res) => {
  console.log('statusCode:', res.statusCode);
  console.log('headers:', res.headers);

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

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

req.write(postData);
req.end();

45
Schöne Antwort @aring. Wenn Sie JSON senden möchten, ändern Sie Folgendes: var postData = JSON.stringify({msg: 'Hello World!'})und'Content-Type': 'application/json'
loonison101

1
Vielen Dank - Ich habe herausgefunden, dass die Verwendung von require ('http') und das Setzen von port auf 443 in Optionen nicht der richtige Weg ist, um eine HTTP-Anfrage zu senden.
Tschumann

4
Ich gehe davon aus, dass req.write(postData);dies die Veröffentlichung der Daten wäre. Wäre ich korrekt? Ich habe Daten, die von meinem Postort zurückkommen, und erhalte ausgegebene Daten in JSON im Terminal. Wie könnte ich diese Daten in einer Variablen speichern, von der ich zurückgekommen bin?
JamLizzy101
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.