我正在尝试编写一个简单的http帖子,它会将一个json主体发送到一个安静的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
我遇到的麻烦是身体以字符串形式进入服务器而不是十六进制。这是我发送的内容:
体=%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": "3@blah.com",
"Name": "bobby",
"CustomFields" : [
{
"Key":"Country",
"Value":"canada"
},
{
"Key":"City",
"Value":"vancouver"
}
],
"Resubscribe": true
}
如何打包这些数据,使其不会以字符串形式出现?
答案 0 :(得分:2)
而不是:
request.set_form_data(:body => data)
试试这样:
request.body = data
net / http不应该是对邮件正文进行uri编码,如果你发现这种情况发生了,那么可能还有其他的事情正在发生,或者你可能只是错了。