issues - Curl equivalente en nodejs?
jira rest api get all issues (16)
¿Qué tal, por ejemplo, https://github.com/joyent/node/wiki/modules#wiki-tcp . Un resumen muy rápido =>
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
Dado que parece que node-curl
está muerto, lo he bifurcado, renombrado y modificado para que sea más curl y compilar en Windows.
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!
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();
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''));
});
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
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 programas (coffeescript): https://gist.github.com/1105888
Módulo de npmjs.com/package/request es bueno de usar, tiene opciones de configuración para solicitud de solicitud / npmjs.com/package/request y además es ampliamente utilizado en el entorno de producción.
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.
});
Puedes intentar usar la aplicación POSTMAN Chrome para tu solicitud y puedes generar el código js del nodo desde allí
Terminé usando la biblioteca grunt-shell .
Here 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.
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://<username>.cloudant.com/<database_name> --user <api_key>:<pass_key> -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.
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.
}
})
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 Promise , 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
.
bueno, si realmente necesitas un curl equivalente, puedes probar node-curl
npm install node-curl
probablemente necesite agregar libcurl4-gnutls-dev
.
puedes usar fácilmente el módulo de solicitud:
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)
}
})