У меня проблемы с получением 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?