如何使HTTParty忽略SSL?

时间:2014-01-06 17:01:52

标签: ruby ssl httparty

我正在使用本地服务器来测试应用程序,并从我自己的计算机向该服务器发出请求。

测试服务器的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?

4 个答案:

答案 0 :(得分:53)

在最新的HTTParty中,您可以使用verify选项禁用SSL验证;

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

答案 1 :(得分:26)

要使 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}")

或者

require 'httparty'

module APIHelpers
  class Client
    include HTTParty
    default_options.update(verify: false)
  end
end
World(APIHelpers)

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

答案 2 :(得分:3)

如果您仍想发送证书,请使用此标志:

verify_peer: false

答案 3 :(得分:0)

这可能是完全不合时宜的,因为我是Ruby的新手,但这在其他解决方案无法解决的情况下对我有用

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE