Базовая библиотека https и библиотека npm 'request'

Я сталкиваюсь с очень странной проблемой при попытке использовать встроенную библиотеку узлов https.

Заголовки запроса:

  let requestDetails = {
    hostname: 'api.domain.com',
    method: 'POST',
    path: '/endpointIWant/goHere
    headers: {
      'Client-ID': clientId,
      'Content-Type': 'application/json',
      Authorization: bearerToken
    },
  };

Тело запроса:

 let body = JSON.stringify({
    "content_type": "application/json",
     "message" : message
  });

Это мой стандартный вызов с использованием https-библиотеки node по умолчанию:

 let req = https.request(requestDetails, function (res){

    let responseBody = undefined;

    res.on('body', function(res) {
      responseBody = '';
    });

    res.on('data', function(chunk) {
      responseBody += chunk;
    });

    res.on('end', function() {
      console.info(responseBody);
    });
  });

  req.write(body);

  req.on('error', function(e) {
    console.info(e);
  });

  req.end();

Теперь, когда я отправляю этот запрос на соответствующий сервер, я получаю:

Your browser sent a request that this server could not understand.
Reference #7.24507368.1554749705.3185b29b

Однако, когда я использую популярную библиотеку «запросов» в NPM, она работает нормально, и я получаю ожидаемый ответ.

Это наводит на мысль, что, возможно, в «кодировании» или «разделении» запросов между этими двумя библиотеками есть что-то другое, но я не могу понять, что.

Кто-нибудь имеет опыт работы с библиотекой Node https и понимает какие-то ошибки?

Я предпочитаю использовать как можно больше встроенных библиотек, чтобы уменьшить размер пакета.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
214
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При использовании нативных модулей http или https вам необходимо использовать модуль querystring для преобразования тела в строку.

const querystring = require('querystring');

let body = querystring.stringify({
    "content_type": "application/json",
    "message" : message
});

//also include the content length of your body as a header

let requestDetails = {
    hostname: 'api.domain.com',
    method: 'POST',
    path: '/endpointIWant/goHere
    headers: {
      'Client-ID': clientId,
      'Content-Type': 'application/json',
      'Content-Length' : body.length
      Authorization: bearerToken
    },
  };

'запрос' построен поверх нативных модулей и делает это внутренне, когда вы передаете ему тело json.

Спасибо! На самом деле я делал это раньше в предыдущих реализациях, но забыл прочитать свои собственные заметки. Можете ли вы объяснить, почему ему нужен queryString по сравнению с JSON.stringify?

ABD 09.04.2019 14:36

к сожалению не помогло. Даже при этом у меня все еще возникают проблемы с сервером, с которого я запрашиваю

ABD 09.04.2019 18:14

Мне пришлось использовать этот тип контента в заголовке, чтобы заставить его работать, знаете ли вы, почему: 'application/x-www-form-urlencoded',

ABD 09.04.2019 19:11

Я не уверена. Какие ошибки вы получили после изменения строки запроса, но до изменения типа содержимого?

singh_arpit 09.04.2019 22:22

Другие вопросы по теме