2011-11-18 9 views
11

उदाहरण के लिए, RestClient कंसोल में:मैं पोस्ट पर रुबी के रेस्ट क्लाइंट मणि सम्मान सामग्री_ प्रकार कैसे बना सकता हूं?

RestClient.post 'http://localhost:5001', {:a => 'b'}, :content_type => 'application/json' 

यह सामग्री प्रकार के रूप में आवेदन/json नहीं भेजता है। इसके बजाय मैं देख रहा हूँ:

Content-Type: application/x-www-form-urlencoded 

मैं restclient/payload.rb करने के लिए परिवर्तन का पता लगाने में सक्षम था:

class UrlEncoded < Base 
    ... 

    def headers 
    super.merge({'Content-Type' => 'application/x-www-form-urlencoded'}) 
    end 
end 

सुपर साथ super.merge की जगह का कारण बनता है सामग्री प्रकार का सम्मान किया जाना है, लेकिन स्पष्ट रूप से है कि नहीं है एक असली समाधान। क्या किसी को इसे ठीक करने का उचित तरीका पता है? धन्यवाद।

उत्तर

20

हो सकता है कि आप हैश के बजाय जेसन को अपने पेलोड के रूप में स्ट्रिंग के रूप में रखना चाहें। उदाहरण के लिए, कार्य करें:

RestClient.post 'http://localhost:5001','{"a":"b"}',:content_type => 'application/json' 

आप payload.rb को देखें, तो यह पता चलता है कि यह urlencoded वर्ग के बजाय बेस clase का उपयोग करेगा अगर पेलोड स्ट्रिंग है। कोशिश करें और देखें कि यह आपके लिए काम करता है या नहीं।

+0

धन्यवाद, जो सही तरीके से काम करता है:

require 'json' payload.to_json 

बाकी-ग्राहक की रेपो में एक ticket नहीं है। –

6

मैं यह जोड़ना चाहता हूं कि RestClient::Request.execute (RestClient.post या RestClient.get के विपरीत) का उपयोग करते समय मेरा मुद्दा था।

समस्या यह थी कि मैं :content_type और :accept कैसे स्थापित कर रहा था। उदाहरण से मैं यह महसूस किया कि जैसे वे इस तरह शीर्ष स्तर विकल्प होना चाहिए देखा:

res = RestClient::Request.execute(
    :method => :get, 
    :url => url, 
    :verify_ssl => false, 
    :content_type => :json, 
    :accept => :json, 
    :headers => { 
    :Authorization => "Bearer #{token}", 
    }, 
    :payload => '{"a":"b"}' 
) 

लेकिन आप वास्तव में इस तरह :headers के भीतर उन्हें डाल करने के लिए है:

res = RestClient::Request.execute(
    :method => :get, 
    :url => url, 
    :verify_ssl => false, 
    :headers => { 
    :Authorization => "Bearer #{token}", 
    :content_type => :json, 
    :accept => :json 
    }, 
    :payload => '{"a":"b"}' 
) 
6

तथ्य:

:post अनुरोध के लिए, जब payloadHash है, Content-Type शीर्षलेखपर हमेशा ओवरराइड किया जाएगा 10।

बाकी-क्लाइंट (2.0.0) के साथ पुन: उत्पादणीय।

समाधान:

json स्ट्रिंग में कनवर्ट हैश पेलोड।

संबंधित मुद्दे