Datos POST con módulo de solicitud en Node.JS

137

Este módulo es 'solicitud https://github.com/mikeal/request

Creo que estoy siguiendo cada paso pero me falta una discusión ...

var request = require('request');
request.post({
        url: 'http://localhost/test2.php',
         body: "mes=heydude"
         }, function(error, response, body){
            console.log(body);
    });

en el otro extremo tengo

echo $_POST['mes'];

Y sé que el php no está mal ...

Diego Torres
fuente
¿Por qué no usar http.requestdirectamente? Tengo la sensación de que el cuerpo no se asigna a parámetros de cadena de consulta como ese. Probarurl: 'http://localhost/test2.php?mes=heydude'
Raynos

Respuestas:

200

EDITAR: Deberías revisar Needle . Lo hace por usted y admite datos de varias partes, y mucho más.

Me di cuenta de que me faltaba un encabezado

var request = require('request');
request.post({
  headers: {'content-type' : 'application/x-www-form-urlencoded'},
  url:     'http://localhost/test2.php',
  body:    "mes=heydude"
}, function(error, response, body){
  console.log(body);
});
Diego Torres
fuente
66
Recuerde JSON.stringifysus datos si está enviando'content-type': 'application/json'
Derek Soike
78

Cuando se utiliza requestpara una POST http, puede agregar parámetros de esta manera:

var request = require('request');
request.post({
  url:     'http://localhost/test2.php',
  form:    { mes: "heydude" }
}, function(error, response, body){
  console.log(body);
});
TinyTimZamboni
fuente
42

Tuve que publicar pares de valores clave sin forma y podría hacerlo fácilmente como a continuación:

var request = require('request');

request({
  url: 'http://localhost/test2.php',
  method: 'POST',
  json: {mes: 'heydude'}
}, function(error, response, body){
  console.log(body);
});
Rapaz
fuente
37

Si está publicando un cuerpo json, no use el formparámetro. El uso formconvertirá las matrices en field[0].attribute, field[1].attributeetc. En su lugar, use de esta bodymanera.

var jsonDataObj = {'mes': 'hey dude', 'yo': ['im here', 'and here']};
request.post({
    url: 'https://api.site.com',
    body: jsonDataObj,
    json: true
  }, function(error, response, body){
  console.log(body);
});
Ricky
fuente
"jsonDataObj" debe ser stringified (JSON.stringify (...)) de lo contrario se bloquea
Doctor
En realidad, la mía se cuelga si la cadenas. Probablemente depende de cómo esté configurado el servidor receptor.
Andrew
1
Gracias por tu respuesta. ¿Dónde puedo encontrar el documento para esto? Como dudaba del método de publicación, pero el documento en Github no es suficiente para solucionar este problema.
Cielo
16
var request = require('request');
request.post('http://localhost/test2.php', 
    {form:{ mes: "heydude" }}, 
    function(error, response, body){
        console.log(body);
});
apostolado
fuente
11
  1. Instale el módulo de solicitud, utilizando npm install request

  2. En codigo:

    var request = require('request');
    var data = '{ "request" : "msg", "data:" {"key1":' + Var1 + ', "key2":' + Var2 + '}}';
    var json_obj = JSON.parse(data);
    request.post({
        headers: {'content-type': 'application/json'},
        url: 'http://localhost/PhpPage.php',
        form: json_obj
    }, function(error, response, body){
      console.log(body)
    });
Aniket B
fuente
¡Aparte de los errores en la cadena json, este me sirvió! Tenga en cuenta que la sección "formulario" tiene un objeto pasado, por lo que podría definir todo allí como un objeto para comenzar y no hacer ese trabajo de preparación
rgbflawed
0

Tengo que obtener los datos de un POSTmétodo del PHPcódigo. Lo que funcionó para mí fue:

const querystring = require('querystring');
const request = require('request');

const link = 'http://your-website-link.com/sample.php';
let params = { 'A': 'a', 'B': 'b' };

params = querystring.stringify(params); // changing into querystring eg 'A=a&B=b'

request.post({
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, // important to interect with PHP
  url: link,
  body: params,
}, function(error, response, body){
  console.log(body);
});
Rahmat Ali
fuente
-2

Recomiendo axios https://www.npmjs.com/package/axios instalarlo con npm o hilo

const axios = require('axios');

axios.get('http://your_server/your_script.php')
    .then( response => {
    console.log('Respuesta', response.data);
    })
    .catch( response => {
        console.log('Error', response);
    })
    .finally( () => {
        console.log('Finalmente...');
    });
Oscar Perez
fuente