我屈服了 - 我已经尝试了几个小时来破解这个难题,但还是想不通。我对 Ruby 太陌生(没有 Python 背景!),无法翻译它,然后将我的 JSON 数据发布到需要用户/密码的站点,然后获取响应数据。
这是 Python 代码:
r = requests.post('https://keychain.oneid.com/validate/', json.dumps(data), auth=('username', 'password'))
r.json()
数据
是:
{"some" => "data", "fun" => "times"}
我试图在 Ruby 中复制此代码的功能以用于 Rails 应用程序,但在弄清楚 Python requests.post()
函数如何运行然后编写 Ruby 代码之间对于 POST 和 GET,我已经完全迷失了。
我试过 Net::HTTP 但我不清楚我是否应该将用户名/密码放在正文中或使用 basic_auth
方法 - basic_auth
似乎仅在 Net::HTTP.get
内部工作 ...Net::HTTP 似乎无法轻松处理 JSON,但同样,此时我完全可以出去吃午饭了。
如有任何建议或帮助,我们将不胜感激!
最佳答案
使用 rest-client gem 或者只使用 Net::HTTP
。
Ruby 代码(版本 1.9.3):
require 'net/http'
require 'json'
require 'uri'
uri = URI('https://keychain.oneid.com/validate/')
req = Net::HTTP::Post.new uri.path
# ruby 2.0: req = Net::HTTP::Post.new uri
req.basic_auth 'username', 'password'
req.body = {:some => 'data', :fun => 'times'}.to_json
res = Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
http.ssl_version = :SSLv3
http.request req
end
puts res.body
# => {"errorcode": -99, "error": "Invalid API credentials. Please verify and try again"}
json = JSON.parse res.body
puts json['errorcode']
# => -99
关于python - 从 Python 转换后,如何在 Ruby 中通过 HTTP 发布 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16474985/