Как заставить Ruby-гем RestClient уважать content_type в сообщении?

Например, в консоли RestClient:

RestClient.post 'http://localhost:5001', {:a => 'b'}, :content_type => 'application/json'

Это не отправляет application / json в качестве типа содержимого. Вместо этого я вижу:

Content-Type: application/x-www-form-urlencoded

Мне удалось отследить изменение в restclient / payload.rb:

  class UrlEncoded < Base
  ...

  def headers
    super.merge({'Content-Type' => 'application/x-www-form-urlencoded'})
  end
end

Замена super.merge на super вызывает соблюдение типа содержимого, но, очевидно, это не настоящее решение. Кто-нибудь знает, как это исправить? Спасибо.

13
задан Nick Urban 18 November 2011 в 22:35
поделиться

1 ответ

Я пытался отправить имя пользователя и пароль, вместе с csrf маркерами и подлинным cookie, по почте в формате данных формы. Преобразование полезной нагрузки в json и явно устанавливающий заголовок типа контента не помогло. Я закончил передающая полезная нагрузка как строка запроса и удалил ее преобразование в JSON:

RestClient::Request.execute(
  method: :post, 
  url: 'http://app_url/login.do',
  payload: "username=username&password=password&_csrf=token",
  headers: {'X-XSRF-TOKEN' => 'token'},
  cookies: {'XSRF-TOKEN' =>  cookie_object}
)

Другая опция состояла бы в том, чтобы также использовать encode_www_form, но строка запроса работает лучше на мой определенный вариант использования.

, В то время как это не общий падеж и все зависит от формата параметра, ожидаемого к бэкэнду, это - все еще жизнеспособный вариант передать строку запроса в теле POST, если сервер ожидает URL, кодирующий телом POST. Надо надеяться, это могло бы помочь кому-то.

0
ответ дан 1 December 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: