Как увидеть JSON POST тело с контроллера Rails - PullRequest
0 голосов
/ 29 февраля 2020

У меня проблемы с получением JSON тела ответа HTTP для запроса POST.

Вот небольшой скрипт для отправки запроса POST в мое приложение Rails:

def post_request
    uri = URI.parse("http://localhost:3000/agent_connect")
    header = {"Content-Type": "text/json"}

    data = {"key":"value", "random":"name"}

    http = Net::HTTP.new(uri.host, uri.port)
    request = Net::HTTP::Post.new(uri.request_uri, header)
    request.body = data.to_json

    response = http.request(request)
    return JSON(response)
end

У меня есть binding.pry для проверки параметров и запроса POST, который показывает:

Started POST "/agent_connect.json?uuid=test" for 172.17.0.1 at 2020-02-28 15:25:33 -0600
Cannot render console from 172.17.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by ApiController#agent_connect as JSON
  Parameters: {"uuid"=>"test"}
Can't verify CSRF token authenticity.
  Agent Load (0.7ms)  SELECT  "agents".* FROM "agents" WHERE "agents"."uuid" = $1 LIMIT $2  [["uuid", "test"], ["LIMIT", 1]]
  _ app/controllers/api_controller.rb:125

From: /var/www/myapp/app/controllers/api_controller.rb @ line 129 ApiController#agent_connect:

    127:
    128:     # Use agent ID and SecureRandom as token
 => 129:     binding.pry
    134:

[1] pry(#<ApiController>)> response.body
=> ""

response.body пусто, однако скрипт показывает, что отправляются данные POST.

Затем я попытался использовать cURL, чтобы увидеть, был ли способ создания сценария с использованием:

curl "http://localhost:3000/agent_connect.json?uuid=test" -H "Content-Type: application/json" --data '{"key":"value","random":"name"}'

, и вот что я получил:

[5] pry(#<ApiController>)> params
=> <ActionController::Parameters {"key"=>"value", "random"=>"name", "uuid"=>"test", "controller"=>"api", "action"=>"agent_connect", "format"=>"json", "api"=>{"key"=>"value", "random"=>"name"}} permitted: false>

два запроса по-разному отображаются в Rails, потому что скрипт отправляет заголовок Content-Type как text/json, а cURL использует text/json.

Что я делаю неправильно, из-за чего я не могу получить доступ response.body чтобы увидеть ответ JSON?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...