2015-11-13 129 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