1137 Stimmen

Wie wird eine HTTP POST-Anfrage in node.js gestellt?

Wie kann ich eine ausgehende HTTP POST-Anfrage mit Daten in node.js erstellen?

1230voto

Jed Watson Punkte 19862

request ist jetzt veraltet. Es wird empfohlen Sie verwenden eine Alternative

In keiner bestimmten Reihenfolge und furchtbar unvollständig:

Vergleich der Statistiken Einige Code-Beispiele

Ursprüngliche Antwort:

Dies wird sehr viel einfacher, wenn Sie die Anfrage Bibliothek.

var request = require('request');

request.post(
    'http://www.yoursite.com/formpage',
    { json: { key: 'value' } },
    function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body);
        }
    }
);

Abgesehen davon, dass es eine schöne Syntax bietet, macht es json-Anfragen einfach, handhabt Oauth-Signierung (für Twitter, etc.), kann mehrteilige Formulare (z.B. zum Hochladen von Dateien) und Streaming.

Zum Installieren der Anfrage verwenden Sie den Befehl npm install request

947voto

onteria_ Punkte 64688

Hier ist ein Beispiel für die Verwendung von node.js, um eine POST-Anfrage an die Google Compiler API zu stellen:

// We need this to build our post string
var querystring = require('querystring');
var http = require('http');
var fs = require('fs');

function PostCode(codestring) {
  // Build the post string from an object
  var post_data = querystring.stringify({
      'compilation_level' : 'ADVANCED_OPTIMIZATIONS',
      'output_format': 'json',
      'output_info': 'compiled_code',
        'warning_level' : 'QUIET',
        'js_code' : codestring
  });

  // An object of options to indicate where to post to
  var post_options = {
      host: 'closure-compiler.appspot.com',
      port: '80',
      path: '/compile',
      method: 'POST',
      headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': Buffer.byteLength(post_data)
      }
  };

  // Set up the request
  var post_req = http.request(post_options, function(res) {
      res.setEncoding('utf8');
      res.on('data', function (chunk) {
          console.log('Response: ' + chunk);
      });
  });

  // post the data
  post_req.write(post_data);
  post_req.end();

}

// This is an async file read
fs.readFile('LinkedList.js', 'utf-8', function (err, data) {
  if (err) {
    // If this were just a small part of the application, you would
    // want to handle this differently, maybe throwing an exception
    // for the caller to handle. Since the file is absolutely essential
    // to the program's functionality, we're going to exit with a fatal
    // error instead.
    console.log("FATAL An error occurred trying to read in the file: " + err);
    process.exit(-2);
  }
  // Make sure there's data before we post it
  if(data) {
    PostCode(data);
  }
  else {
    console.log("No data to post");
    process.exit(-1);
  }
});

Ich habe den Code aktualisiert, um zu zeigen, wie man Daten aus einer Datei anstelle der hartkodierten Zeichenfolge postet. Es verwendet die async fs.readFile um dies zu erreichen, wobei der eigentliche Code nach einem erfolgreichen Lesevorgang angezeigt wird. Tritt ein Fehler auf, wird er ausgelöst, und wenn keine Daten vorhanden sind, wird der Prozess mit einem negativen Wert beendet, um den Fehler anzuzeigen.

140voto

Josiah Choi Punkte 1813

Sie können die Anforderungsbibliothek verwenden. https://www.npmjs.com/package/request

var request = require('request');

Zum Einstellen von JSON-Daten:

var myJSONObject = { ... };
request({
    url: "http://josiahchoi.com/myjson",
    method: "POST",
    json: true,   // <--Very important!!!
    body: myJSONObject
}, function (error, response, body){
    console.log(response);
});

Zum Einstellen von Xml-Daten:

var myXMLText = '<xml>...........</xml>'
request({
    url: "http://josiahchoi.com/myjson",
    method: "POST",
    headers: {
        "content-type": "application/xml",  // <--Very important!!!
    },
    body: myXMLText
}, function (error, response, body){
    console.log(response);
});

EDITAR: Ab Februar 2020 request wurde deprecated .

91voto

mpen Punkte 253762

Einfach und abhängigkeitsfrei. Verwendet ein Promise, damit Sie das Ergebnis abwarten können. Gibt den Antwortkörper zurück und prüft den Antwortstatuscode nicht.

const https = require('https');

function httpsPost({body, ...options}) {
    return new Promise((resolve,reject) => {
        const req = https.request({
            method: 'POST',
            ...options,
        }, res => {
            const chunks = [];
            res.on('data', data => chunks.push(data))
            res.on('end', () => {
                let resBody = Buffer.concat(chunks);
                switch(res.headers['content-type']) {
                    case 'application/json':
                        resBody = JSON.parse(resBody);
                        break;
                }
                resolve(resBody)
            })
        })
        req.on('error',reject);
        if(body) {
            req.write(body);
        }
        req.end();
    })
}

Verwendung:

async function main() {
    const res = await httpsPost({
        hostname: 'sentry.io',
        path: `/api/0/organizations/org/releases/${changesetId}/deploys/`,
        headers: {
            'Authorization': `Bearer ${process.env.SENTRY_AUTH_TOKEN}`,
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            environment: isLive ? 'production' : 'demo',
        })
    })
}

main().catch(err => {
    console.log(err)
})

62voto

attacomsian Punkte 2120

Es gibt Dutzende von Open-Source-Bibliotheken, die Sie verwenden können, um eine HTTP-POST-Anfrage in Node zu machen.

1. Axios (Empfohlen)

const axios = require('axios');

const data = {
    name: 'John Doe',
    job: 'Content Writer'
};

axios.post('https://reqres.in/api/users', data)
    .then((res) => {
        console.log(`Status: ${res.status}`);
        console.log('Body: ', res.data);
    }).catch((err) => {
        console.error(err);
    });

2. Nadel

const needle = require('needle');

const data = {
    name: 'John Doe',
    job: 'Content Writer'
};

needle('post', 'https://reqres.in/api/users', data, {json: true})
    .then((res) => {
        console.log(`Status: ${res.statusCode}`);
        console.log('Body: ', res.body);
    }).catch((err) => {
        console.error(err);
    });

3. Anfrage

const request = require('request');

const options = {
    url: 'https://reqres.in/api/users',
    json: true,
    body: {
        name: 'John Doe',
        job: 'Content Writer'
    }
};

request.post(options, (err, res, body) => {
    if (err) {
        return console.log(err);
    }
    console.log(`Status: ${res.statusCode}`);
    console.log(body);
});

4. Natives HTTPS-Modul

const https = require('https');

const data = JSON.stringify({
    name: 'John Doe',
    job: 'Content Writer'
});

const options = {
    hostname: 'reqres.in',
    path: '/api/users',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Content-Length': data.length
    }
};

const req = https.request(options, (res) => {
    let data = '';

    console.log('Status Code:', res.statusCode);

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

    res.on('end', () => {
        console.log('Body: ', JSON.parse(data));
    });

}).on("error", (err) => {
    console.log("Error: ", err.message);
});

req.write(data);
req.end();

Weitere Einzelheiten finden Sie in diesem artículo .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X