【问题标题】:Rails send four backslashes using Net::HTTPRails 使用 Net::HTTP 发送四个反斜杠
【发布时间】:2015-02-27 15:35:41
【问题描述】:

我的 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)

其中 data 是转换为 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 应用程序中得到许多反斜杠,因此无法将字符串转换为数组

有什么想法吗??

【问题讨论】:

    标签: php json ruby-on-rails-4 net-http


    【解决方案1】:

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

    如果您想发布原始 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
    

    【讨论】:

    • 太好了,谢谢!对于那些觉得它有帮助的人来说一件事 - 为了在 php 应用程序中获取 json,您应该使用以下命令从正文中检索它:$body = file_get_contents('php://input');
    猜你喜欢
    • 1970-01-01
    • 2012-12-09
    • 2016-08-23
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多