2015-11-13 349 views
2

我如何添加参数后我有什么现在:红宝石HTTP 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}" 

这些是我想要送PARAMS:

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

谢谢。

回答

2

看来您正在尝试使用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