2014-01-06 103 views
44

我正在使用本地服務器來測試應用程序,並從我自己的機器向該服務器發出請求。如何讓HTTParty忽略SSL?

測試服務器的SSL不好,並且由於這一點,HTTParty會引發錯誤。從我讀,HTTParty應該忽略默認SSL,但是當我嘗試這樣做:

HTTParty.get("#{ @settings.api_server }#{ url }").parsed_response 

它拋出這個錯誤:

OpenSSL::SSL::SSLError at/
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 

如何使它忽略SSL?

+2

將api URI更改爲'http'而不是'https'或者刪除端口443(如果指定了)? –

+0

看到這裏 - https://github.com/jnunemaker/httparty/issues/93 – maerics

+0

呃,使用http反而很好,tnx邁克!我曾經看到過你提到的問題,maerics,如果我理解了正確的小談話,我不應該首先得到這些錯誤,這就是爲什麼我實際上發佈了這個問題,我很無能。 –

回答

51

在最新的HTTParty中,可以使用驗證選項來禁用SSL驗證;

HTTParty.get("#{ @settings.api_server }#{ url }", :verify => false).parsed_response 
+0

httparty-0.13.7 - 沒有運氣 – okliv

+0

我試過0.13。 7和你的建議工作正常。我的電話有點簡單:HTTParty.get(url::verify => false) – guero64

22

爲了HTTParty總是跳過SSL證書驗證,而不必在每次調用指定此:

require 'httparty' 
HTTParty::Basement.default_options.update(verify: false) 

HTTParty.get("#{@settings.api_ssl_server}#{url1}") 
HTTParty.get("#{@settings.api_ssl_server}#{url2}") 
HTTParty.get("#{@settings.api_ssl_server}#{url3}") 
# ... 

你也可以做,包括在此範圍的一類HTTParty爲一個模塊:

require 'httparty' 

class Client 
    include HTTParty 

    default_options.update(verify: false) 
end 

Client.get("#{@settings.api_ssl_server}#{url1}") 
Client.get("#{@settings.api_ssl_server}#{url2}") 
Client.get("#{@settings.api_ssl_server}#{url3}") 
+0

爲我工作了最新版本的httparty 0.13.7。謝謝(Y) –

1

如果你還想發送你的證書,使用這個標誌:

verify_peer: false 
+0

這是IMO的最佳答案。我不明白爲什麼有人想要完全關閉SSL,特別是在生產環境中。 –