Ruby Http Post 参数

Ruby Http Post Parameters

如何将 post 参数添加到我现在拥有的内容中:

@toSend = {
        "nonce" => Time.now.to_i,
        "command" => "returnCompleteBalances"
    }.to_json    

uri = URI.parse("https://poloniex.com/tradingApi")
        https = Net::HTTP.new(uri.host,uri.port)
        https.use_ssl = true
        https.verify_mode = OpenSSL::SSL::VERIFY_NONE
        req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'})
        req.set_form_data({"nonce" => Time.now.to_i, "command" => "returnCompleteBalances"})
        req['Key'] = '******-N4WZI2OG-******-10RX5JYR'
        req['Sign'] = 'secret_key'

        req.body = "[ #{@toSend} ]"
        res = https.request(req)
        puts "Response #{res.code} #{res.message}: #{res.body}"

这些是我要发送的参数:

"nonce" => Time.now.to_i,
"command" => "returnCompleteBalances"

谢谢。

您似乎正在尝试使用 Poloniex 的交易 API。如果这是您的主要目标,您可能希望考虑使用库来处理细节。例如:

https://github.com/Lowest0ne/poloniex

如果您的主要目标不是简单地使用 API,而是将其作为一种学习经验,这里有一些建议:

  • API 文档指出 API 接受表单编码的 POST 数据(而不是 JSON)但以 JSON 响应。
  • 关键参数 ("Key") 就像您的用户 ID。它允许 Poloniex 了解谁试图对 API.
  • 发出请求
  • 签名参数 ("Sign") 是根据您的密钥内容和消息内容(编码的表单数据)生成的 HMAC。这会产生一种只有您和 Poloniex 才能复制的信息的指纹,从而在一定程度上保证您的请求来自密钥的所有者。当然,这是假设你的秘钥确实只有你自己知道。

我不使用 Poloniex 交易所,因此无法测试此代码,但我相信这与您要完成的目标很接近:

require 'net/http'
require 'openssl'

secret = 'your-secret-key'
api_key = 'your-api-key'
uri = URI('https://poloniex.com/tradingApi')

http = Net::HTTP.new(uri.host)
request = Net::HTTP::Post.new(uri.request_uri)
form_data = URI.encode_www_form({:command => 'returnBalances', :nonce => Time.now.to_i * 1000 })
request.body = form_data
request.add_field('Key', api_key)
request.add_field('Sign', OpenSSL::HMAC.hexdigest( 'sha512', secret, form_data))

res = http.request(request)
puts res.body