Curl-equivalent in Node.js?

Ik ben op zoek om informatie van een HTTP-aanvraag te gebruiken met behulp van Node.js (d.w.z. bel een externe webservice en echo de reactie op de client).

In PHP zou ik curl hebben gebruikt om dit te doen. Wat is de beste praktijk in het knooppunt?


Antwoord 1, Autoriteit 100%

Zie de documentatie voor de HTTP-module voor een volledig voorbeeld:

https://nodejs.org/api/http.html#http_http_request_options_callback


Antwoord 2, Autoriteit 72%

De httpmodule die u gebruikt om servers uit te voeren, wordt ook gebruikt om externe verzoeken te maken .

Hier is het voorbeeld in hun documenten:

var http = require("http");
var options = {
  host: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST'
};
var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});
req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});
// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

Antwoord 3, Autoriteit 34%

U kunt eenvoudig de aanvraagmodule gebruiken:

https://www.npmjs.com/package/request

Voorbeeldcode:

var request = require('request');
request('http://www.google.com', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) // Show the HTML for the Google homepage. 
  }
  else {
    console.log("Error "+response.statusCode)
  }
})

Antwoord 4, Autoriteit 26%

Aangezien er uitziet als node-curlis dood, ik ‘ ve gevorkt, hernoemd en gewijzigd om meer krullen te zijn en om onder Windows te compileren.

node-libcurl

Gebruiksvoorbeeld:

var Curl = require( 'node-libcurl' ).Curl;
var curl = new Curl();
curl.setOpt( Curl.option.URL, 'www.google.com' );
curl.setOpt( 'FOLLOWLOCATION', true );
curl.on( 'end', function( statusCode, body, headers ) {
    console.info( statusCode );
    console.info( '---' );
    console.info( body.length );
    console.info( '---' );
    console.info( headers );
    console.info( '---' );
    console.info( this.getInfo( Curl.info.TOTAL_TIME ) );
    this.close();
});
curl.on( 'error', function( err, curlErrorCode ) {
    console.error( err.message );
    console.error( '---' );
    console.error( curlErrorCode );
    this.close();
});
curl.perform();

presteren is async, en er is geen manier om het synchroon te gebruiken momenteel (en waarschijnlijk nooit zal hebben).

Het is nog steeds in alpha, maar dit gaat snel veranderen en helpt de hulp.

Nu is het mogelijk om Easyhendel te gebruiken voor synchronisatieaanvragen, bijvoorbeeld:

var Easy = require( 'node-libcurl' ).Easy,
    Curl = require( 'node-libcurl' ).Curl,
    url = process.argv[2] || 'http://www.google.com',
    ret, ch;
ch = new Easy();
ch.setOpt( Curl.option.URL, url );
ch.setOpt( Curl.option.HEADERFUNCTION, function( buf, size, nmemb ) {
    console.log( buf );
    return size * nmemb;
});
ch.setOpt( Curl.option.WRITEFUNCTION, function( buf, size, nmemb ) {
    console.log( arguments );
    return size * nmemb;
});
// this call is sync!
ret = ch.perform();
ch.close();
console.log( ret, ret == Curl.code.CURLE_OK, Easy.strError( ret ) );

Het project is nu ook stabiel!


Antwoord 5, autoriteit 24%

BEWERKEN:

Voor nieuwe projecten gelieve geen verzoek te gebruiken, aangezien het project zich nu in de onderhoudsmodus bevindt en uiteindelijk zal worden beëindigd

https://github.com/request/request/issues/3142

In plaats daarvan zou ik Axiosaanbevelen, de bibliotheek is in overeenstemming met de nieuwste normen van Node en er zijn enkele beschikbare plug-ins om deze te verbeteren, waardoor nepserverreacties, automatische nieuwe pogingen en andere functies mogelijk zijn.

https://github.com/axios/axios

const axios = require('axios');
// Make a request for a user with a given ID
axios.get('/user?ID=12345')
  .then(function (response) {
    // handle success
    console.log(response);
  })
  .catch(function (error) {
    // handle error
    console.log(error);
  })
  .then(function () {
    // always executed
  });

Of gebruik async / wait:

try{
    const response = await axios.get('/user?ID=12345');
    console.log(response)
} catch(axiosErr){
    console.log(axiosErr)
}

Ik gebruik meestal REQUEST, het is een vereenvoudigde maar krachtige HTTP-client voor Node.js

https://github.com/request/request

het is op NPM
npm install request

Hier is een gebruiksvoorbeeld:

var request = require('request');
request('http://www.google.com', function (error, response, body) {
   if (!error && response.statusCode == 200) {
       console.log(body) // Show the HTML for the Google homepage.
   }
})

Antwoord 6, Autoriteit 8%

Nou, als je echt een krul-equivalent nodig hebt, kun je node-curl

npm install node-curl

U moet waarschijnlijk libcurl4-gnutls-devtoevoegen.


Antwoord 7, Autoriteit 7%

De bovenstaande voorbeelden werken, maar ga niet zo ver om echt te behandelen met een real-wereldvoorbeeld (dat wil zeggen wanneer u gegevens verwerkt die in meerdere brokken komen. Een ding dat u nodig hebt om zeker te zijn van een ‘op brok ‘Handler die de gegevens in een array (snelste manier om dit in JS te doen) en een’ on-end’-handler die ze allemaal bij elkaar verbindt, zodat je het kunt retourneren.

Dit is vooral nodig wanneer u werkt met grote verzoeken (5000 lijnen) en de server stuurt een hoop gegevens op u.

Hier is een voorbeeld in een van mijn programma’s (Coffeescript):
https://gist.github.com/1105888


Antwoord 8, Autoriteit 6%

Hoe zit het met bijvoorbeeld https://github.com/joyent/node/ WIKI / MODULES # WIKI-TCP . Een zeer snel samenvatting = & gt;


Antwoord 9, autoriteit 4%

Er is een npm-module om een curl-achtig verzoek te doen, npm curlrequest.

Stap 1: $npm i -S curlrequest

Stap 2: In uw knooppuntbestand

let curl = require('curlrequest')
let options = {} // url, method, data, timeout,data, etc can be passed as options 
curl.request(options,(err,response)=>{
// err is the error returned  from the api
// response contains the data returned from the api
})

Voor meer informatie en begrip, npm curlrequest


Antwoord 10, autoriteit 3%

Gebruik aanvraag npm module en na oproep

var request = require('request');
request('http://www.google.com', function (error, response, body) {
  console.log('error:', error); // Print the error if one occurred
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log('body:', body); // Print the HTML for the Google homepage.
});

Gebruik voor de beste werkwijze ook een winstonlogger-module of anders eenvoudige console.log en voer vervolgens uw toepassing uit zoals

npm start output.txt 

Resultaat van bovenstaande opdracht genereert één txt-bestand op root met alle gegevens die u hebt afgedrukt in console.log


Antwoord 11, autoriteit 2%

Gebruikt reqclient, het is een kleine clientmodule bovenop requestwaarmee u alle activiteiten kunt loggen in cURL-stijl(optioneel, voor ontwikkelomgevingen). Heeft ook leuke functies zoals het parseren van URL’s en parameters, authenticatie-integraties, cache-ondersteuning, enz.

Als u bijvoorbeeld een clientobject maakt en een verzoek doet:

var RequestClient = require("reqclient").RequestClient;
var client = new RequestClient({
        baseUrl:"http://baseurl.com/api/v1.1",
        debugRequest:true, debugResponse:true
    });
var resp = client.post("client/orders", {"client":1234,"ref_id":"A987"}, {headers: {"x-token":"AFF01XX"}})

Het logt ongeveer als volgt in de console:

[Requesting client/orders]-> -X POST http://baseurl.com/api/v1.1/client/orders -d '{"client": 1234, "ref_id": "A987"}' -H '{"x-token": "AFF01XX"}' -H Content-Type:application/json
[Response   client/orders]<- Status 200 - {"orderId": 1320934}

Het verzoek retourneert een Belofteobject, dus je moet met thenen catchafhandelen wat je met het resultaat moet doen.

reqclientis beschikbaar met npm, u kunt de module installeren met: npm install reqclient.


Antwoord 12, autoriteit 2%

Hier is een standaard lib (http) async / wait-oplossing.

const http = require("http");
const fetch = async (url) => {
  return new Promise((resolve, reject) => {
    http
      .get(url, (resp) => {
        let data = "";
        resp.on("data", (chunk) => {
          data += chunk;
        });
        resp.on("end", () => {
          resolve(data);
        });
      })
      .on("error", (err) => {
        reject(err);
      });
  });
};

Gebruik:

await fetch("http://example.com");

Antwoord 13

Uiteindelijk heb ik met behulp van de grunt-shell bibliotheek.

Hier is mijn bron kern voor mijn volledig geïmplementeerd Grunt taak voor iemand anders denken over het werken met de EdgeCast API. Je zult in mijn voorbeeld vinden dat ik een grunt-shell om de krul commando dat het CDN zuiveringen uit te voeren.

Dit was dat ik kreeg uiteindelijk na urenlang proberen om een ​​HTTP-verzoek aan het werk binnen Node krijgen. Ik was in staat om een ​​werkend te krijgen in Ruby en Python, maar voldeed niet aan de eisen van dit project.


Antwoord 14

U kunt proberen met behulp van POSTMAN Chrome-app voor uw aanvraag en u kunt knooppunt js code te genereren vanaf daar


Antwoord 15

Ik had een probleem verzenden POST gegevens naar cloud DB uit IOT Raspberry Pi, maar na uren ik erin geslaagd om het recht te krijgen.

Ik gebruikte command prompt om dit te doen.

sudo curl --URL http://<username>.cloudant.com/<database_name> --user <api_key>:<pass_key> -X POST -H "Content-Type:application/json" --data '{"id":"123","type":"987"}'

Opdrachtprompt toont de problemen – verkeerde gebruikersnaam/pas; slecht verzoek enz.

–URL-database/serverlocatie (ik gebruikte eenvoudige gratis Cloudant DB)
–gebruiker is de gebruikersnaam van het authenticatiegedeelte: pass die ik heb ingevoerd via API-pass
-X definieert welk commando moet worden aangeroepen (PUT,GET,POST,DELETE)
-H inhoudstype – Cloudant gaat over documentdatabase, waar JSON wordt gebruikt
–data-inhoud zelf gesorteerd als JSON


Antwoord 16

Request npm module Request node mouldeis goed te gebruiken, het heeft optie-instellingen voor get /post request plus het wordt ook veel gebruikt in de productieomgeving.


Antwoord 17

U kunt de aanvraag npm-module gebruiken.
Supereenvoudig in gebruik.
Request is ontworpen om de eenvoudigste manier te zijn om http-aanroepen te doen. Het ondersteunt HTTPS en volgt standaard omleidingen.

var request = require('request');
request('http://www.google.com', function (error, response, body) {
  console.log('error:', error); // Print the error if one occurred
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log('body:', body); // Print the HTML for the Google homepage.
});

Antwoord 18

Misschien wil je iets als dit proberen

curl = require('node-curl');
curl('www.google.com', function(err) {
  console.info(this.status);
  console.info('-----');
  console.info(this.body);
  console.info('-----');
  console.info(this.info('SIZE_DOWNLOAD'));
});

Other episodes