Руби Тайфус драгоценный камень - Неправильный Джсон в теле?
У меня есть следующий код:
require 'Typhoeus'
url = Typhoeus::Request.new("https://fluidsurveys.com/api/v2/webhooks/subscribe/",
userpwd: "username_test:password_test",
method: :post,
body: {
'subscription_url' => 'http://glacial-spire-test.herokuapp.com/hooks/response_created_callback',
'event' => 'response_complete'
},
headers: { 'Content-Type' => "application/json"})
response = url.run.body
puts response
Это возвращает код ответа 400
и ошибка:
Content-Type set to application/json but could not decode valid JSON in request body.
Вот документы для вызова API, который я делаю: http://docs.fluidsurveys.com/api/webhooks.html
POST /api/v2/webhooks/subscribe/¶
Returns a status of 409 if a webhook with the subscription url already exists. Returns a
status of 201 if the webhook was successfully created. Requests must be sent as an
application/json-encoded dictionary with the required fields subscription_url and event
Пример запроса (согласно документам):
{
"subscription_url": "http://fluidsurveys.com/api/v2/callback/",
"event": "response_complete",
"survey": 1,
"collector": 1
}
Что я здесь не так делаю? Опрос и сборщик являются необязательными параметрами, и я не вижу проблемы с json в моем теле.
1 ответ
Решение
Я предполагаю, что вам может понадобиться преобразовать тело запроса в JSON с помощью такой библиотеки, как Oj
( https://github.com/ohler55/oj). С использованием Oj
библиотека:
requestBody = {
'subscription_url' => 'http://glacial-spire-test.herokuapp.com/hook/response_created_callback',
'event' => 'response_complete'
}
url = Typhoeus::Request.new("https://fluidsurveys.com/api/v2/webhooks/subscribe/",
userpwd: "username_test:password_test",
method: :post,
body: Oj.dump(requestBody, mode: :compat),
headers: { 'Content-Type' => "application/json"})
response = url.run.body
puts response
Критическая линия:
body: Oj.dump(requestBody, mode: :compat)
Если вам нужно загрузить любой контент JSON в Ruby, просто используйте Oj.load