2014-01-06 106 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,特别是在生产环境中。 –