2014-07-11 11 views
31

Cách chuyển tham số truy vấn và tiêu đề trong phương thức bài bằng cách sử dụng HTTparty. Tôi đang làm như sau Nhưng nó némChuyển tiêu đề và tham số truy vấn trong HTTparty

query = {:method => "neworder", :nonce => 1404996028, :order_type => "buy", :quantity=>1,:rate=>1} 
headers = {:key=> "87819747209090199871234", :sign=> "0a3888ac7f8e411ad73a0a503c55db70a291rsf34bfb9f9a47147d5200882674f717f6ede475669f3453"} 

HTTParty.post("https://www.acb.com/api/v2/market/LTC_BTC/", :query => query, :headers => headers) 

Nhưng nó ném lỗi sau đây. Làm thế nào để xử lý các tham số chuỗi truy vấn và các tiêu đề với HTTparty.

/home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/header.rb:172:in `capitalize': undefined method `split' for :key:Symbol (NoMethodError) 
from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/header.rb:165:in `block in each_capitalized' 
from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/header.rb:164:in `each' 
from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/header.rb:164:in `each_capitalized' 

Trả lời

67

Sử dụng Strings cho khóa băm thay vì Symbols.

query = { 
    "method"  => "neworder", 
    "nonce"  => 1404996028, 
    "order_type" => "buy", 
    "quantity" => 1, 
    "rate"  => 1 
} 
headers = { 
    "key" => "8781974720909019987", 
    "sign" => "0a3888ac7f8e411ad73a0a503c55db70a291bfb9f9a47147d5200882674f717f6ede475669f3453" 
} 

HTTParty.post(
    "https://www.acb.com/api/v2/market/LTC_BTC/", 
    :query => query, 
    :headers => headers 
) 

Có lẽ chỉ headers rằng đã gây ra một vấn đề do lỗi xảy ra trong net/http/header.rb:172. Các thông tin quan trọng là undefined method 'split' for :key:Symbol (NoMethodError)

lỗi Symbol trong irb:

irb(main):002:0> "Something".split 
=> ["Something"] 

irb(main):003:0> :Something.split 
NoMethodError: undefined method `split' for :Something:Symbol 
     from (irb):3 
     from /usr/bin/irb:12:in `<main>' 
+0

tôi thấy rằng với một số cuộc gọi API sử dụng ': body' thay vì': query' sẽ làm việc. Nói chung, hãy chú ý đến cách bạn đặt tên cho các tham số yêu cầu – divergent

2

Đó là một câu hỏi hơi cũ, nhưng chúng tôi đã có cùng một vấn đề thời gian gần đây, vì vậy tôi cố gắng để đính kèm các giải pháp của tôi:

1) Câu trả lời ở trên đang làm việc:

"headers": { "Authorization"=> "Bearer #{token}" }

2) Ngoài ra, các soluti khác trên là nâng cấp ruby ​​của bạn để 2.2.5, và những gì bạn có thể làm là:

headers: { Authorization: "Bearer #{token}" }

HTH

Các vấn đề liên quan