2014-07-19 43 views
1

我有一個json對象發送給Google的QXP Express API。我的想法是,我發送的對象與相關的旅行信息。在終端,通過捲曲,發送它非常容易。我只使用下面的curl命令。 Doc.json是json的文件名。通過Ruby on Rails將JSON發送到API Url

curl -d @doc.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=AIzaSyAaLHEBBLCI4aHLNu2jHiiAQGDbCunBQX0 

這是我在Ruby中的代碼。

uri = URI('https://www.googleapis.com/qpxExpress/v1/trips/search?key=MYAPIKEY') 
req = Net::HTTP::Post.new uri.path 

req.body = { 
    "request" => { 
    "passengers" => { 
     "adultCount" => 1 
    }, 
    "slice" => [ 
     { 
     "origin" => "BOS", 
     "destination" => "LAX", 
     "date" => "2014-10-14" 
     }, 
     { 
     "origin" => "LAX", 
     "destination" => "BOS", 
     "date" => "2014-11-14" 
     } 
    ] 
    } 
}.to_json 

res = Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http| 
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
    http.ssl_version = :SSLv3 
    http.request req 
end 

puts res.body 

但是我回來了以下錯誤。

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "parseError", 
    "message": "This API does not support parsing form-encoded input." 
    } 
    ], 
    "code": 400, 
    "message": "This API does not support parsing form-encoded input." 
} 
} 

我只是需要發送它與json文件,但沒有我可以在網上找到涵蓋發送json的API。請幫助,我很困難。

回答

1

它總是品味你喜歡什麼工具,但對於我來說,我目前使用rest-client gem來訪問REST API。有了這個庫,你的例子可以這樣寫:

require 'json' 
require 'rest-client' 
response = RestClient.post 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=AIzaSyAaLHEBBLCI4aHLNu2jHiiAQGDbCunBQX0', 
      { 
       request: { 
       passengers: { 
        adultCount: 1 
       }, 
       slice: [ 
        { 
        origin: "BOS", 
        destination: "LAX", 
        date: "2014-10-14" 
        }, 
        { 
        origin: "LAX", 
        destination: "BOS", 
        date: "2014-11-14" 
        } 
       ] 
       } 
      }.to_json, 
      :content_type => :json 
puts response.body 

但是,如果你想要一個Net :: HTTP唯一的解決方案,這可能不是一個適合你的答案。

+0

其實這是我最初嘗試的。出於某種原因,休息客戶不會昨天發帖,但是當我今天解僱他時,情況很好。不過,謝謝你,我的帖子讓我再試一次! – OceansOnPluto