Rails отправляет четыре обратной косой черты, используя Net :: HTTP

Моему приложению rails необходимо отправить некоторые данные в приложение php, которое ожидает вызов POST.
Я использую следующий код:

uri = URI.parse(apiUrl)
req = Net::HTTP::Post.new(uri.to_s, initheader = {'Content-Type' =>'application/json'})

req.basic_auth(api_key, token)
req.set_form_data({"action" => action, "data" => data})

http = Net::HTTP.new(uri.host, uri.port)
response = http.request(req)

Где данные — это хеш, преобразованный в json:

data = {
:key1 => val1,
:key2 => val2
}.to_json

(это вложенный хеш, т.е. некоторые значения также являются хешами)

Моя проблема заключается в том, что приложение php получает 4 обратной косой черты перед каждой кавычкой:

$data_json = $_POST['data'];
error_log($data_json);

и в журнале ошибок я вижу:

'{\\\\"key1\\\\":val1,\\\\"key2\\\\":\\\\"val2\\\\"}'

Похоже, что rails добавить один из них, но даже если я удаляю его и заменяю его следующим кодом:

a.gsub!(/\"/, '\'')

Я до сих пор получаю много обратной косой черты внутри приложения php, следовательно не может преобразовать строку в массив.

Любая идея??

1

Решение

Используя set_form_data net / http отправляет форму как urlencoded. Это НЕ публикует ваше тело запроса как чистый JSON.

Если вы хотите POST raw JSON, вам нужно будет следовать такой схеме:

uri = URI('https://myapp.com/api/v1/resource')
req = Net::HTTP::Post.new(uri, initheader = {'Content-Type' =>'application/json'})
req.body = {param1: 'some value', param2: 'some other value'}.to_json
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]