Node JS отправить пустое JSON тело - PullRequest
0 голосов
/ 26 мая 2020

У меня есть код ниже, который должен отправить запрос POST, но с пустым JSON телом:

request.post({
    url: url,
    headers: {
        "data_digest": 'muZ7EcapQZVb77RF',
        "partner_code": "ebfebc241db9b9c1a",
        "msg_type": "GET_BASEDATA_TRANSPORT",
        "msg_id": '1590464383047',
        "Accept-Language": "zh-cn"
    },
    json: true,
    body: {}
}, function(error, response, body) {
    console.log(body);
});

Однако это продолжает возвращать

'System Exception:\r\ntype org.springframework.web.HttpMediaTypeNotAcceptableException\r\nmessage:Could not find acceptable representation'

Но с использованием Postman Я могу правильно отправить запрос POST с точно такими же заголовками, но только с пустым {} в параметре Body в формате Raw.

Как я могу отправить запрос POST с пустым JSON телом в Node JS?

1 Ответ

1 голос
/ 26 мая 2020

Ваш способ отправки тела в порядке. Если вы посмотрите на фактический отправленный запрос (например, с помощью Fiddler или Wireshark), вы увидите, что тело отправлено правильно. Проблема в другом - вместо этого вы увидите, что заголовки не точно такие же.

Использование json (либо с json: true и body, либо как вы сделайте это, используя json в качестве объекта) также автоматически устанавливает заголовок Accept на application/json и пытается проанализировать ответ как JSON.

Кажется, что на этом сервере chiguotest.ytoglobal.com есть ошибка , где он возвращает JSON, но неправильно обрабатывает заголовок Accept (я тестировал его, и похоже, что сервер «думает», что он возвращает text/plain). Итак, request (правильно) сообщает серверу: «Я ожидаю, что вы вернете JSON», но сервер говорит: «Что, JSON? Нет, я не знаю, как вернуть JSON, только текст, извините . ". Тем не менее, он действительно возвращает JSON.

Вы можете обойти эту ошибку сервера, явно отправив заголовок Accept: */*:

request.post({
    url: url,
    headers: {
        "data_digest": 'muZ7EcapQZV',
        "partner_code": "ebfebc241db9b9c",
        "msg_type": "GET_BASEDATA_TRANSPORT",
        "msg_id": '1590464383047',
        "Accept-Language": "zh-cn",
        "Accept": "*/*"
    },
    json: true,
    body: {}
}, function(error, response, body) {
    console.log(body);
});

Мой вывод:

{
  "data": {
    "productKinds": [
      {
        "productCnname": "(美国)测试用-不拉G单号",
        "productCode": "1",
        "productEnname": "1",
        "productServerhawbcodeNeed": "Y"
      },
      {
        "productCnname": "散客可见产品",
        "productCode": "111",
        "productEnname": "内部产品",
        "productServerhawbcodeNeed": "N"
      },
      ... many more entries ...
   ]
  },
  "errorCode": "SUCCESS",
  "errorMsg": "成功",
  "status": true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...