Rails使用Net :: HTTP发送四个反斜杠

时间:2014-12-31 15:16:33

标签: php json ruby-on-rails-4 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 个答案:

答案 0 :(得分:1)

使用set_form_data net / http将表单POST为urlencoded。它不会将您的请求正文发布为纯JSON。

如果你想POST原始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