ruby - 从 Ruby 发布时如何避免对 JSON 进行 uri 编码?

标签 ruby json http post

我正在尝试编写一个简单的 http post,它将 json 正文发送到 Restful api。我正在使用以下代码:

data = {'EmailAddress' => email, 'Name' => 'bobby', 'CustomFields' => [ {'Key' => 'Country', 'Value' => 'canada'}, {'Key' => 'City', 'Value' => 'vancouver'} ], 'Resubscribe' => true }.to_json

require 'net/http'
net = Net::HTTP.new("api.createsend.com", 80)
request = Net::HTTP::Post.new("/api/v3/subscribers/#{@list}.json")
request.basic_auth(@api, 'magic')
request.set_form_data(:body => data)

response = net.start do |http|
http.request(request)
end
puts response.code
puts response.read_body

我遇到的问题是主体将以字符串形式而不是十六进制形式发送到服务器。这是我要发送的内容:

body=%7b%22EmailAddress%22%3a%223%40blah.com%22%2c%22Name%22%3a%22bobby%22%2c%22CustomFields%22%3a%5b%7b%22Key%22%3a%22Country%22%2c%22Value%22%3a%22canada%22%7d%2c%7b%22Key%22%3a%22City%22%2c%22Value%22%3a%22vancouver%22%7d%5d%2c%22Resubscribe%22%3atrue%7d

这是我要发送的内容:

{
  "EmailAddress": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b685f6d4dad7de98d5d9db" rel="noreferrer noopener nofollow">[email protected]</a>",
  "Name": "bobby",
  "CustomFields" : [
    {
      "Key":"Country",
      "Value":"canada"
    },
    {
      "Key":"City",
      "Value":"vancouver"
    }
  ],
  "Resubscribe": true
}

如何打包这些数据,使其不会以字符串形式输出?

最佳答案

而不是:

request.set_form_data(:body => data)

尝试这样:

request.body = data

net/http 不应该对帖子正文进行 uri 编码,如果您看到这种情况发生,那么可能是其他原因在执行此操作,或者您只是弄错了。

关于ruby - 从 Ruby 发布时如何避免对 JSON 进行 uri 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11699038/

相关文章:

arrays - 使用 *ngFor (Angular 4) 遍历 JSON 对象数组

django - Docker 端口转发

Angular HttpClient 和 Observables

ruby - 当前可用的编辑器是否支持 Ruby 的散列冒号?

javascript - 带有 $http 请求的 Angular js 中的加载时间百分比

javascript - 有没有办法在 super 测试中设置默认值?

java - Jackson - 处理对象数组,添加和删除

html - 从 Ruby 中的 HTML 字符串生成 HTML 页面的原始字符串元描述?

ruby-on-rails - RSpec 测试自定义验证器

http - 通过 SSL 登录但在非 SSL 页面上显示帐户名?