как nodejs http.request отправляет параметры json в интерфейс java

у нас есть java-интерфейс для отправки verify_code на телефон, и почтальон отлично справился с этим。

почтальон

мой код nodejs, как показано ниже

let test = {
        "phoneNumber": "15021071273",
        "smsParams": [
            "注册",
            "123456",
            "注册"
        ],
        "tmplId": 109341
    }

    var content = JSON.stringify(test);

    // An object of options to indicate where to post to
    var post_options = {
        host: '172.16.211.33', //'common-message'
        port: '10011',
        path: '/sms/sendTecentyunSms',
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': content.length
        }
    };

    // Set up the request
    var post_req = http.request(post_options, function (res) {
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
            console.log('Response: ' + chunk);
        });
    });

    // post the data
    post_req.write(content);
    post_req.end();

и интерфейс java отвечает:

Ответ: {"timestamp": 1572935973619, "status": 400, "error": "Bad Request", "exception": "org.springframework.http.converter.HttpMessageNotReadableException", "message": "Ошибка синтаксического анализа JSON: неожиданная. конец ввода внутри / между записями объекта; вложенное исключение - com.fasterxml.jackson.core.io.JsonEOFException: неожиданный конец ввода внутри / между записями объекта \ n в [Источник: java.io.PushbackInputStream@3e497877 ; строка: 1, столбец: 157] "," путь ":" / sms / sendTecentyunSms "}

похоже, это просто ошибка парсинга json.

Я также попытался сначала JSON.stringy tese.smsParams, не работал

req.write принимает только строку или буфер, поэтому он не может просто поместить объект json в качестве параметра。


person John    schedule 05.11.2019    source источник
comment
Можете ли вы попробовать test = '{phoneNumber: 15021071273, .....}' вместо stringfy   -  person Rajarshi Das    schedule 05.11.2019


Ответы (2)


Пожалуйста, попробуйте этот способ

var http = require('http')

var body = JSON.stringify({
        "phoneNumber": "15021071273",
        "smsParams": [
            "注册",
            "123456",
            "注册"
        ],
        "tmplId": 109341
    })

var request = new http.ClientRequest({
    hostname: "172.16.211.33",
    port: 10011,
    path: "/sms/sendTecentyunSms",
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        "Content-Length": Buffer.byteLength(body)
    }
})

request.end(body)


request.on('response', function (response) {
  console.log('STATUS: ' + response.statusCode);
  console.log('HEADERS: ' + JSON.stringify(response.headers));
  response.setEncoding('utf8');
  response.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});
person Rajarshi Das    schedule 05.11.2019

Попробуй это:


    var content = JSON.stringify(test);

    // An object of options to indicate where to post to
    var post_options = {
        host: '172.16.211.33', //'common-message'
        port: '10011',
        path: '/sms/sendTecentyunSms',
        body:content,
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': content.length
        }
    };

Или попробуйте модуль request

const request = require('request');

let test = {
    "phoneNumber": "15021071273",
    "smsParams": [
        "注册",
        "123456",
        "注册"
    ],
    "tmplId": 109341
}

var content = JSON.stringify(test);

// An object of options to indicate where to post to
var post_options = {
    method: 'post',
    url:"http://172.16.211.33:10011/sms/sendTecentyunSms",
    body:content
};

request(post_options,(err, res, body) => {
  if (err) { return console.log(err); }
  console.log(body.url);
  console.log(body.explanation);
});

вы можете поиграть с ним здесь < / а>

person Eslam Abu Hugair    schedule 05.11.2019