Curl equivalente en nodejs?

Estoy buscando utilizar información de una solicitud HTTP usando nodejs (es decir, llamar a un servicio web remoto y repetir la respuesta del cliente).

En PHP habría usado curl para hacer esto. ¿Cuál es la mejor práctica en el nodo?

Consulte la documentación del módulo HTTP para ver un ejemplo completo:

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

El módulo http que usa para ejecutar servidores también se usa para realizar solicitudes remotas.

Aquí está el ejemplo en sus documentos:

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

Dado que parece que node-curl está muerto, lo he bifurcado, renombrado y modificado para que sea más curl y comstackr en Windows.

node-libcurl

Ejemplo de uso:

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

Perform es asincrónico, y no hay forma de usarlo sincrónico actualmente (y probablemente nunca lo tenga).

Todavía está en alfa, pero esto va a cambiar pronto, y se agradece la ayuda.

Ahora es posible usar Easy handle directamente para solicitudes de sincronización, por ejemplo:

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

¡Además, el proyecto es estable ahora!

puedes usar fácilmente el módulo de solicitud:

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

Código de muestra:

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

Usualmente uso REQUEST, es un cliente HTTP simplificado pero poderoso para Node.js

https://github.com/request/request

Está en la npm install request NPM npm install request

Aquí hay una muestra de uso:

 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. } }) 

Los ejemplos anteriores funcionan, pero no van tan lejos como para tratar realmente con un ejemplo del mundo real (es decir, cuando procesa datos que vienen en múltiples fragmentos. Una cosa de la que debe asegurarse es que tiene un manejador ‘en bloque’ que inserta los datos en una matriz (la forma más rápida de hacerlo en JS) y un controlador ‘en el extremo’ que los une para que puedas devolverlos.

Esto es especialmente necesario cuando trabaja con grandes solicitudes (más de 5000 líneas) y el servidor le envía una gran cantidad de datos.

Aquí hay un ejemplo en uno de mis progtwigs (coffeescript): https://gist.github.com/1105888

bueno, si realmente necesitas un curl equivalente, puedes probar node-curl

 npm install node-curl 

probablemente necesite agregar libcurl4-gnutls-dev .

Hay un módulo npm para hacer una solicitud tipo curl, npm curlrequest .

Paso 1: $npm i -S curlrequest

Paso 2: en tu archivo de nodo

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

Para una mayor lectura y comprensión, npm curlrequest

Terminé usando la biblioteca gruñido .

Aquí está mi fuente de información para mi tarea Grunt totalmente implementada para cualquier persona que esté pensando en trabajar con la API de EdgeCast. Encontrarás en mi ejemplo que utilizo un grunt-shell para ejecutar el comando curl que purga el CDN.

Esto fue con lo que terminé después de pasar horas tratando de obtener una solicitud HTTP para trabajar dentro de Node. Pude obtener uno trabajando en Ruby y Python, pero no cumplí con los requisitos de este proyecto.

Utiliza reqclient , es un pequeño módulo de cliente además de la request que le permite registrar toda la actividad con estilo cURL (opcional para entornos de desarrollo). También tiene buenas características como análisis de URL y parámetros, integraciones de autenticación, soporte de caché, etc.

Por ejemplo, si crea un objeto de cliente y hace una solicitud:

 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"}}) 

Se registrará dentro de la consola algo como esto:

 [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} 

La solicitud devolverá un objeto Promesa , por lo que tendrá que manejar con then y ver qué hacer con el resultado.

reqclient está disponible con npm , puede instalar el módulo con: npm install reqclient .

Módulo de petición npm El nodo de solicitud Moulde es bueno de usar, tiene opciones de configuración para solicitud de solicitud / recepción y además es ampliamente utilizado en el entorno de producción.

Es posible que desee intentar usar algo como esto

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

Puedes intentar usar la aplicación POSTMAN Chrome para tu solicitud y puedes generar el código js del nodo desde allí

Tuve un problema al enviar datos de POST a la BD de la nube de IOT RaspberryPi, pero después de horas logré entenderlo.

Usé el símbolo del sistema para hacerlo.

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

El símbolo del sistema mostrará los problemas: nombre de usuario / contraseña incorrectos; mala solicitud, etc.

–URL database / server location (utilicé Cloudant DB simple) –user es el nombre de usuario de la autenticación: pase ingresé a través de API pass -X define qué comando llamar (PUT, GET, POST, DELETE) -H tipo de contenido – Cloudant se trata de la base de datos de documentos, donde se usa JSON. El contenido de datos se clasifica como JSON.

Puede usar el módulo request npm. Súper simple de usar. La solicitud está diseñada para ser la forma más sencilla posible de realizar llamadas http. Es compatible con HTTPS y sigue redirecciones por defecto.

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

Utilice el módulo request npm y después de la llamada

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

Para obtener la mejor práctica, también use algún módulo de Winston Logger o simplemente console.log y luego ejecute su aplicación como

 npm start output.txt 

El resultado del comando anterior generará un archivo txt en la raíz con todos los datos que haya impreso en console.log