python - 从 Python 转换后,如何在 Ruby 中通过 HTTP 发布 JSON?

标签 python ruby json

我屈服了 - 我已经尝试了几个小时来破解这个难题,但还是想不通。我对 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/

相关文章:

python - 如何将多个进程的输出连接到另一个进程的输入?

ruby - 雷神 CLI : Setting a custom order of commands in help output

Ruby float to_r 计算。小数化为分数

javascript - 如何按照选中的顺序将复选框的值存储在数组中

python - pynput 键盘监听器自动重复

c# - 无法使用 IronPython 导入用 C# 编写的模块

python - 如何将 1d 数组转换为 3d 数组(将灰度图像转换为 rgb 格式)?

ruby-on-rails - 从数据库项数组中获取属性数组

javascript - 在 javascript 中访问和迭代 json

c# - 将 POST 中的 json 发送到 Web API 服务时出错