2012-08-29 82 views
1

我需要調用一個外部URL來從遠程數據庫中提取一些信息。通過HTTPS Ruby on Rails進行POST

我試圖建立我的電話是這樣的:

post_params = {'a' => 'b', 'b' => 'c',} 
resp = Net::HTTP.post_form(URI.parse('https:/my.remoteserver.com/'), post_params) 

此方法返回一個400錯誤的請求,但是,由於該URL是HTTPS。

如果我格式化呼叫作爲GET,但是,做這樣的事情:

url = URI.parse("https:/my.remoteserver.com?a=b&b=c") 
result = Net::HTTP.start(url.host, use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE) do 
    |http| http.get url.request_uri, 'User-Agent' => 'MyLib v1.2' 
end 

,一切工作正常。不幸的是,在我的具體情況下,我無法使用GET。我假設有一種方法可以通過POST來完成,但我不知道那會是什麼。如果有人能幫我解決這個問題,我會很感激。謝謝!

+1

這有用嗎? http://javazquez.com/juan/2008/12/07/ruby-https-posting/ – apneadiving

+0

是的,謝謝! – keybored

+0

好吧,剛剛提交了答案,然後 – apneadiving

回答

0
+0

我也試圖從HTTP切換到HTTPS,並嘗試了很多可能的方式(包括你的),這終於讓我跑步了:http://objectmix.com/ruby/720849- net-http-post_form.html我把它放在這裏供參考,以防別人有麻煩 – MMachinegun

7

其他答案的鏈接的關鍵部分,你的問題的原因可能是因爲你需要設置use_ssl = trueNet::HTTP元素:

例子:

post_params = {'a' => 'b', 'b' => 'c',} 

uri = URI 'https:/my.remoteserver.com/' 

http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true if uri.scheme == 'https' 

resp = http.post_form(uri, post_params) 
+2

未定義的方法'post_form' – AjaxLeung