簡體   English   中英

有沒有一種方法可以在Ruby中使用Net :: HTTP傳遞參數和標頭?

[英]Is there a way to pass parameters and headers using Net::HTTP in Ruby?

我正在嘗試構建一個小的Ruby腳本來與Binance API交互( https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md

這是我到目前為止所擁有的。 這都是一個腳本,但是為了清楚起見,我將其分解為“我認為有效的內容”和“我認為無效的內容”部分:

我認為include,function和param創建可以正常工作:

require 'json'
require 'uri'
require 'net/http'
require 'openssl'

def params_with_signature(params, secret)
  params = params.reject { |_k, v| v.nil? }
  query_string = URI.encode_www_form(params)
  signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), secret, query_string)
  params = params.merge(signature: signature)
end

BASE_URL = 'https://api.binance.com'
api_key = ''
api_secret = ''

params = {
    symbol: 'BNBBTC',
    side: 'BUY',
    type: 'MARKET',
    timeInForce: 'GTC',
    quantity: 1,
    recvWindow: 5000,
    timestamp: Time.now.to_i * 1000
}

我認為這是出問題的地方

uri = URI("#{BASE_URL}/api/v3/order")

header = {'Content-Type': 'text/json'}

http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri, header)
request.body = params_with_signature(params, api_secret).to_json
request["X-MBX-APIKEY"] = api_key

response = http.request(request)

puts response.body

問題是嘗試發送請求時,我不斷收到各種“格式錯誤”的錯誤。 同樣,我認為問題出在上面的Net :: HTTP post嘗試。

任何想法都很棒!

我不確定這是否適合您,但我已經重寫了您的代碼以使用HTTParty gem而不是net/http 在我看來,使用該寶石要容易得多。 結果,我得到了{"code":-2014,"msg":"API-key format invalid."} ,我認為這是正確的響應,因為我沒有Binance的API密鑰。

require 'json'
require 'uri'
require 'httparty'
require 'openssl'

def params_with_signature(params, secret)
  params = params.reject { |_k, v| v.nil? }
  query_string = URI.encode_www_form(params)
  signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), secret, query_string)
  params.merge(signature: signature)
end

params = {
    symbol: 'BNBBTC',
    side: 'BUY',
    type: 'MARKET',
    timeInForce: 'GTC',
    quantity: 1,
    recvWindow: 5000,
    timestamp: Time.now.to_i * 1000
}

BASE_URL = 'https://api.binance.com'
api_key = ''
api_secret = ''

uri = URI("#{BASE_URL}/api/v3/order")

headers = {
  'X-MBX-APIKEY': api_key,
  'Content-Type': 'text/json'
}

response = HTTParty.post(uri, headers: headers, body: params_with_signature(params, api_secret))

puts response.body

讓我知道它是否對您有幫助:)

對於Net/Http版本,您可以在這里查看: https://stackoverflow.com/questions/1252210/parametrized-get-request-in-ruby ://stackoverflow.com/questions/1252210/parametrized-get-request-in-ruby

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM