¿Cómo puedo hacer una solicitud HTTP POST saliente, con datos, en node.js?
node.js
http
post
httprequest
marca
fuente
fuente
node-fetch
que es una implementación delfetch
método nativo de JavaScript para realizar solicitudes HTTP.Respuestas:
Aquí hay un ejemplo del uso de node.js para realizar una solicitud POST a la API del compilador de Google:
He actualizado el código para mostrar cómo publicar datos desde un archivo, en lugar de la cadena codificada. Utiliza el
fs.readFile
comando asíncrono para lograr esto, publicando el código real después de una lectura exitosa. Si hay un error, se arroja, y si no hay datos, el proceso sale con un valor negativo para indicar un error.fuente
querystring.stringify()
no admite objetos anidados , por lo que es posible que desee utilizarlosqs.stringify()
.Content-Length
son bytes y no necesariamente la longitud de la cadena (UTF-16, etc.). UsarBuffer.byteLength(data)
siempre será correcto.querystring.stringify
debe ser su propio objeto de datos, no la basura que se muestra en esta respuesta (¿qué puede ser útil para objetos basados en archivos?). Estuve atrapado en eso durante siglos ... stackoverflow.com/questions/9768192/… proporcionó mi solución completaEsto se vuelve mucho más fácil si usa la biblioteca de solicitudes .
Además de proporcionar una buena sintaxis, facilita las solicitudes json, maneja la firma automática (para twitter, etc.), puede hacer formularios de varias partes (por ejemplo, para cargar archivos) y transmitir.
Para instalar la solicitud, use el comando
npm install request
fuente
Puede usar la biblioteca de solicitudes. https://www.npmjs.com/package/request
Para publicar datos JSON:
Para publicar datos xml:
fuente
Yo uso Restler y Needle para fines de producción. Ambos son mucho más poderosos que la httprequest nativa. Es posible solicitar con autenticación básica, entrada de encabezado especial o incluso cargar / descargar archivos.
En cuanto a la operación post / get, también son mucho más simples de usar que las llamadas ajax sin procesar que usan httprequest.
fuente
Simple y sin dependencia. Utiliza una promesa para que pueda esperar el resultado. Devuelve el cuerpo de respuesta y no verifica el código de estado de respuesta.
Uso:
fuente
write
el métodoreq,write()
?También puede usar Requestify , un cliente HTTP realmente genial y simple que escribí para nodeJS + que admite el almacenamiento en caché.
Solo haz lo siguiente:
fuente
Actualización 2020:
Realmente he estado disfrutando de phin : el cliente HTTP Node.js ultraligero
Se puede usar de dos maneras diferentes. Uno con Promesas (Async / Await) y el otro con estilos tradicionales de devolución de llamada.
Instalar a través de:
npm i phin
Directamente desde su README con
await
:Estilo sin compromiso (devolución de llamada):
A partir de 2015 , ahora hay una gran variedad de bibliotecas diferentes que pueden lograr esto con una codificación mínima. Prefiero las bibliotecas elegantes y livianas para las solicitudes HTTP a menos que necesite absolutamente el control de las cosas HTTP de bajo nivel.
Una de esas bibliotecas es Unirest
Para instalarlo, use
npm
.$ npm install unirest
Y sobre el
Hello, World!
ejemplo al que todos están acostumbrados.Extra:
Mucha gente también sugiere el uso de la solicitud [2]
Vale la pena señalar que detrás de escena
Unirest
utiliza larequest
biblioteca.Unirest proporciona métodos para acceder al objeto de solicitud directamente.
Ejemplo:
fuente
fuente
Hay docenas de bibliotecas de código abierto disponibles que puede usar para hacer una solicitud HTTP POST en Node.
1. Axios (recomendado)
2. Aguja
3. Solicitud
4. Módulo HTTPS nativo
Para más detalles, consulte este artículo .
fuente
Esta es la forma más simple que uso para hacer una solicitud: usando el módulo 'solicitud'.
Comando para instalar el módulo 'solicitud':
Código de ejemplo:
También puede usar el módulo incorporado 'http' de Node.js para realizar una solicitud.
fuente
Me gusta la simplicidad de superagent ( https://github.com/visionmedia/superagent ). La misma API tanto en el nodo como en el navegador.
También hay node-fetch ( https://www.npmjs.com/package/node-fetch ), que tiene una API que coincide
fetch
con los navegadores; sin embargo, esto requiere codificación de cadena de consulta manual, no maneja automáticamente los tipos de contenido, o así que cualquiera de los otros trabajos superagentes lo hace.fuente
Si está buscando solicitudes HTTP basadas en promesas, axios hace su trabajo muy bien.
O
fuente
Para publicar solicitud de Rest / JSON
Simplemente podemos usar el paquete de solicitud y guardar los valores que tenemos que enviar en la variable Json.
Primero instale el paquete requerido en su consola mediante la solicitud de instalación npm --save
fuente
Encontré un video que explica cómo lograr esto: https://www.youtube.com/watch?v=nuw48-u3Yrg
Utiliza el módulo predeterminado "http" junto con los módulos "querystring" y "stringbuilder". La aplicación toma dos números (usando dos cuadros de texto) de una página web y al enviarlos, devuelve la suma de esos dos (junto con la persistencia de los valores en los cuadros de texto). Este es el mejor ejemplo que pude encontrar en cualquier otro lugar.
fuente
Esta es mi solución para
POST
yGET
.Sobre el
Post
método:Si el cuerpo es un objeto JSON, es importante deserializarlo
JSON.stringify
y posiblemente configurar elContent-Lenght
encabezado en consecuencia:antes de escribirlo a la solicitud:
Sobre ambos
Get
yPost
métodos:El
timeout
puede ocurrir comosocket
desconexión, por lo que debe registrar su manejador como:mientras el
request
manejador esLe sugiero que registre ambos manejadores.
El cuerpo de respuesta está fragmentado, por lo que debe concatenar fragmentos en el
data
controlador:En la
end
delbody
contendrá todo el cuerpo de la respuesta:Es seguro envolver con un
try
... catchthe
JSON.parse` ya que no puede estar seguro de que en realidad es un json bien formateado y no hay forma de estar seguro al momento de hacer la solicitud.Módulo:
SimpleAPI
Uso:
fuente
Después de luchar mucho mientras creaba una utilidad de bajo nivel para manejar la publicación y recibir solicitudes para mi proyecto, decidí publicar mi esfuerzo aquí. Mucho en la línea de respuesta aceptada, aquí hay un fragmento para hacer solicitudes POST http y https para enviar datos JSON.
fuente
O podrías usar esta biblioteca:
fuente
request
La biblioteca ha quedado en desuso.Axios es un cliente HTTP basado en promesas para el navegador y Node.js. Axios facilita el envío de solicitudes HTTP asíncronas a puntos finales REST y realiza operaciones CRUD. Se puede usar en JavaScript simple o con una biblioteca como Vue o React.
fuente
Publicar otro ejemplo de axios de una solicitud axios.post que utiliza opciones de configuración adicionales y encabezados personalizados.
fuente
Mediante el uso de solicitud de dependencia.
Solución simple :
fuente
request
vieneRequest-Promise
Proporciona una respuesta basada en promesas. Los códigos de respuesta http que no sean 2xx harán que la promesa sea rechazada. Esto se puede sobrescribir configurando options.simple = falsefuente