2

json本体を安らかなAPIに送信する簡単なhttp投稿を書き込もうとしています。私は次のコードを使用しています:

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

私が抱えている問題は、本体が16進数ではなく文字列としてサーバーに送信されることです。これが私が送っているものです:

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%22再購読%22%3atrue%7d

これが私が送りたいものです:

{
  "EmailAddress": "3@blah.com",
  "Name": "bobby",
  "CustomFields" : [
    {
      "Key":"Country",
      "Value":"canada"
    },
    {
      "Key":"City",
      "Value":"vancouver"
    }
  ],
  "Resubscribe": true
}

このデータを文字列として出力されないようにパックするにはどうすればよいですか?

4

1 に答える 1

2

それ以外の:

request.set_form_data(:body => data)

このようにしてみてください:

request.body = data

net / httpは、投稿の本文をuriエンコードするべきではありません。それが起こっているのを見ると、途中で何か他のことが起こっているか、間違っているだけかもしれません。

于 2012-07-28T07:37:37.433 に答える