Estoy buscando usar información de una solicitud HTTP usando Node.js (es decir, llamar a un servicio web remoto y hacer eco de la respuesta al cliente).
En PHP, hubiera usado cURL para hacer esto. ¿Cuál es la mejor práctica en Node?
También vale la pena señalar que hay una biblioteca de envoltorios muy popular request.jsgithub.com/mikeal/request
Farzher
2
http request y async, curl is sync.
e-info128
2
@WHK tal es la naturaleza de node.js
slifty
El gran problema que veo con esto es que no puede simplemente ingresar la URL y obtener respuesta. Necesita separar la URL en unidades para solicitarla. Pero, maldición, probablemente haya una manera, sería más conveniente usar un comando curl like para esto.
Jānis Gruzis
15
Este sitio puede convertir su cURLcomando a la solicitud node.js
Maxim Mai
74
El httpmódulo que utiliza para ejecutar servidores también se utiliza 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();
Este es un nivel muy bajo en comparación con el comportamiento similar al rizo que solicitó el OP.
Dan Dascalescu
1
Para todos: hoy en día, usa request- npmjs.com/package/request - y vota la respuesta de Nitish a continuación, que es la mejor respuesta en 2018.
Dan Nissenbaum
Bienvenido a la realidad: la solicitud ha quedado en desuso, consulte github.com/request/request/issues/3142 Me parece que la operación de "bajo nivel" tiene más potencial que esto, porque no es bajo en absoluto, es BÁSICO
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)}})
Intenté instalar tanto node-curl como node-libcurl, pero ambos me dan el mismo mensaje: "No se puede encontrar el archivo de encabezado de curl". Esto es durante el node tools/retrieve-win-deps && node tools/generate-stubs && node-gyp rebuildpaso. ¿Alguna idea?
SaganRitual
@GreatBigBore necesita el paquete libcurl devel instalado en su máquina. Si está utilizando Debian, por ejemplo, puede instalarlo con$ apt-get install libcurl4-openssl-dev
JCM
1
¿Puedes usar la -Lopción de alguna manera?
corvid
2
Sí: CURLOPT_FOLLOWLOCATION , con node-libcurl que vas a usar curl.setOpt( 'FOLLOWLOCATION', true );. Por cierto, preguntas como esa se adaptan mejor al rastreador de problemas que esta sección de comentarios. ;)
JCM
23
EDITAR:
Para proyectos nuevos, por favor, abstenerse de usar la solicitud, ya que ahora el proyecto está en modo de gestión y eventualmente será desaprobado.
En cambio, recomendaría Axios , la biblioteca está en línea con los últimos estándares de Node, y hay algunos complementos disponibles para mejorarla, lo que permite respuestas de servidor simuladas, reintentos automáticos y otras características.
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});
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 procesas datos que vienen en múltiples fragmentos. Una cosa que debes asegurarte es que tienes un controlador 'en bloque' que inserta los datos en una matriz (la forma más rápida de hacer esto en JS) y un controlador 'en el extremo' que los une a todos para que pueda devolverlos.
Esto es especialmente necesario cuando trabajas con solicitudes grandes (más de 5000 líneas) y el servidor te envía muchos datos.
Hay módulo de NPM para hacer un rizo como petición npm curlrequest.
Paso 1: $npm i -S curlrequest
Paso 2: en su 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})
Utilice el módulo de solicitud 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 una mejor práctica también utilizar algunos Winston módulo registrador o simples console.log persona y luego ejecutar 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
Aquí está mi esencia para mi tarea Grunt totalmente implementada para cualquier persona que esté pensando en trabajar con la API EdgeCast. Encontrarás en mi ejemplo que uso 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 conseguir uno trabajando en Ruby y Python, pero no cumplí con los requisitos de este proyecto.
Utiliza reqclient , además de un pequeño módulo de cliente requestque le permite registrar toda la actividad con estilo cURL (opcional, para entornos de desarrollo). También tiene buenas características como URL y análisis de parámetros, integraciones de autenticación, soporte de caché, etc.
Por ejemplo, si crea un objeto de cliente y haga una solicitud:
El símbolo del sistema mostrará los problemas: nombre de usuario / contraseña incorrectos; mala solicitud, etc.
--Ubicación de la base de datos / servidor URL (utilicé la base de datos Cloudant DB simple y gratuita) --usuario es el nombre de usuario de la parte de autenticación: pase que ingresé a través de API pass -X define qué comando llamar (PUT, GET, POST, DELETE) -H tipo de contenido - Cloudant trata sobre la base de datos de documentos, donde se usa JSON - contenido de datos en sí mismo ordenado como JSON
Solicitar módulo npm El nodo de solicitud moulde es bueno para usar, tiene opciones de configuración para obtener / publicar solicitud, además de que es ampliamente utilizado en entornos de producción también.
Puede usar el módulo request npm. Súper simple de usar. La solicitud está diseñada para ser la forma más simple posible de hacer llamadas http. Es compatible con HTTPS y sigue las 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.});
http.request
...Respuestas:
Consulte la documentación del módulo HTTP para ver un ejemplo completo:
https://nodejs.org/api/http.html#http_http_request_options_callback
fuente
request.js
github.com/mikeal/requestcURL
comando a la solicitud node.jsEl
http
módulo que utiliza para ejecutar servidores también se utiliza para realizar solicitudes remotas.Aquí está el ejemplo en sus documentos:
fuente
request
- npmjs.com/package/request - y vota la respuesta de Nitish a continuación, que es la mejor respuesta en 2018.puede usar fácilmente el módulo de solicitud:
https://www.npmjs.com/package/request
Código de muestra:
fuente
Como parece que
node-curl
está muerto, lo bifurqué, renombré y modifiqué para que sea más curl y se compile en Windows.node-libcurl
Ejemplo de uso:
Realizar es asíncrono,
y actualmente no hay forma de usarlo sincrónico (y probablemente nunca lo hará).Todavía está en alfa, pero esto va a cambiar pronto, y se agradece la ayuda.Ahora es posible usar el
Easy
controlador directamente para las solicitudes de sincronización, por ejemplo:Además, el proyecto es estable ahora!
fuente
node tools/retrieve-win-deps && node tools/generate-stubs && node-gyp rebuild
paso. ¿Alguna idea?$ apt-get install libcurl4-openssl-dev
-L
opción de alguna manera?curl.setOpt( 'FOLLOWLOCATION', true );
. Por cierto, preguntas como esa se adaptan mejor al rastreador de problemas que esta sección de comentarios. ;)EDITAR:
Para proyectos nuevos, por favor, abstenerse de usar la solicitud, ya que ahora el proyecto está en modo de gestión y eventualmente será desaprobado.
https://github.com/request/request/issues/3142
En cambio, recomendaría Axios , la biblioteca está en línea con los últimos estándares de Node, y hay algunos complementos disponibles para mejorarla, lo que permite respuestas de servidor simuladas, reintentos automáticos y otras características.
https://github.com/axios/axios
O usando async / await:
Usualmente uso SOLICITUD, es un cliente HTTP simplificado pero potente para Node.js
https://github.com/request/request
Está en NPM
npm install request
Aquí hay una muestra de uso:
fuente
bueno, si realmente necesitas un rizo equivalente puedes probar
node-curl
probablemente necesitará agregar
libcurl4-gnutls-dev
.fuente
Los ejemplos anteriores funcionan, pero no van tan lejos como para tratar realmente con un ejemplo del mundo real (es decir, cuando procesas datos que vienen en múltiples fragmentos. Una cosa que debes asegurarte es que tienes un controlador 'en bloque' que inserta los datos en una matriz (la forma más rápida de hacer esto en JS) y un controlador 'en el extremo' que los une a todos para que pueda devolverlos.
Esto es especialmente necesario cuando trabajas con solicitudes grandes (más de 5000 líneas) y el servidor te envía muchos datos.
Aquí hay un ejemplo en uno de mis programas (coffeescript): https://gist.github.com/1105888
fuente
¿Qué tal por ejemplo https://github.com/joyent/node/wiki/modules#wiki-tcp . Un resumen muy rápido =>
fuente
Hay módulo de NPM para hacer un rizo como petición
npm curlrequest
.Paso 1:
$npm i -S curlrequest
Paso 2: en su archivo de nodo
Para mayor lectura y comprensión, npm curlrequest
fuente
Utilice el módulo de solicitud npm y después de la llamada
Para una mejor práctica también utilizar algunos Winston módulo registrador o simples console.log persona y luego ejecutar su aplicación como
El resultado del comando anterior generará un archivo txt en la raíz con todos los datos que haya impreso en console.log
fuente
Terminé usando la biblioteca grunt-shell .
Aquí está mi esencia para mi tarea Grunt totalmente implementada para cualquier persona que esté pensando en trabajar con la API EdgeCast. Encontrarás en mi ejemplo que uso 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 conseguir uno trabajando en Ruby y Python, pero no cumplí con los requisitos de este proyecto.
fuente
Utiliza reqclient , además de un pequeño módulo de cliente
request
que le permite registrar toda la actividad con estilo cURL (opcional, para entornos de desarrollo). También tiene buenas características como URL y análisis de parámetros, integraciones de autenticación, soporte de caché, etc.Por ejemplo, si crea un objeto de cliente y haga una solicitud:
Registrará dentro de la consola algo como esto:
La solicitud devolverá un objeto Promise , por lo que debe manejar
then
ycatch
qué hacer con el resultado.reqclient
está disponible con NPM , puede instalar el módulo con:npm install reqclient
.fuente
Tuve un problema al enviar datos POST a la base de datos en la nube desde IOT RaspberryPi, pero después de horas logré aclararlo.
Usé el símbolo del sistema para hacerlo.
El símbolo del sistema mostrará los problemas: nombre de usuario / contraseña incorrectos; mala solicitud, etc.
--Ubicación de la base de datos / servidor URL (utilicé la base de datos Cloudant DB simple y gratuita) --usuario es el nombre de usuario de la parte de autenticación: pase que ingresé a través de API pass -X define qué comando llamar (PUT, GET, POST, DELETE) -H tipo de contenido - Cloudant trata sobre la base de datos de documentos, donde se usa JSON - contenido de datos en sí mismo ordenado como JSON
fuente
Solicitar módulo npm El nodo de solicitud moulde es bueno para usar, tiene opciones de configuración para obtener / publicar solicitud, además de que es ampliamente utilizado en entornos de producción también.
fuente
Es posible que desee intentar usar algo como esto
fuente
Puede intentar usar la aplicación POSTMAN Chrome para su solicitud y puede generar el código de nodo js desde allí
fuente
Puede usar el módulo request npm. Súper simple de usar. La solicitud está diseñada para ser la forma más simple posible de hacer llamadas http. Es compatible con HTTPS y sigue las redirecciones por defecto.
fuente