Например, в консоли 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 вызывает соблюдение типа содержимого, но, очевидно, это не настоящее решение. Кто-нибудь знает, как это исправить? Спасибо.
Я пытался отправить имя пользователя и пароль, вместе с 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. Надо надеяться, это могло бы помочь кому-то.