使用 Ruby on Rails 的 HTTP GET 请求:OpenSSL::SSL::SSLError
Posted
技术标签:
【中文标题】使用 Ruby on Rails 的 HTTP GET 请求:OpenSSL::SSL::SSLError【英文标题】:HTTP GET request using Ruby on Rails: OpenSSL::SSL::SSLError 【发布时间】:2014-08-31 05:51:07 【问题描述】:我收到以下错误
OpenSSL::SSL::SSLError in ProfilesController#httpwork
SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A
这是我在profiles_controller.rb 中的代码
def httpwork
require "net/http"
require "uri"
require "openssl"
http = Net::HTTP.new("00.000.00.000", 0000)
http.use_ssl = true
http.ssl_version = :SSLv3
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
request = Net::HTTP::Get.new("profileTest")
response = http.request(request)
end
快速注意主机/端口号是隐藏的,但格式是这样的(不像“***.com/question”)
在 httpwork.html.erb 中
<h1>Profiles#httpwork</h1>
<%= @response.body %>
这是完整的堆栈跟踪
C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:918:in
connect'
C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:918:in
block in connect'
C:/Ruby200-x64/lib/ruby/2.0.0/timeout.rb:52:in timeout'
C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:918:in
connect'
C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:862:in do_start'
C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:851:in
start'
C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:1367:in request'
app/controllers/profiles_controller.rb:20:in
httpwork'
actionpack (4.1.2) lib/action_controller/metal/implicit_render.rb:4:in send_action'
actionpack (4.1.2) lib/abstract_controller/base.rb:189:in
process_action'
actionpack (4.1.2) lib/action_controller/metal/rendering.rb:10:in process_action'
actionpack (4.1.2) lib/abstract_controller/callbacks.rb:20:in
block in process_action'
activesupport (4.1.2) lib/active_support/callbacks.rb:113:in call'
activesupport (4.1.2) lib/active_support/callbacks.rb:113:in
call'
activesupport (4.1.2) lib/active_support/callbacks.rb:229:in block in halting'
activesupport (4.1.2) lib/active_support/callbacks.rb:229:in
call'
activesupport (4.1.2) lib/active_support/callbacks.rb:229:in block in halting'
activesupport (4.1.2) lib/active_support/callbacks.rb:166:in
call'
activesupport (4.1.2) lib/active_support/callbacks.rb:166:in block in halting'
activesupport (4.1.2) lib/active_support/callbacks.rb:166:in
call'
activesupport (4.1.2) lib/active_support/callbacks.rb:166:in block in halting'
activesupport (4.1.2) lib/active_support/callbacks.rb:166:in
call'
activesupport (4.1.2) lib/active_support/callbacks.rb:166:in block in halting'
activesupport (4.1.2) lib/active_support/callbacks.rb:86:in
call'
activesupport (4.1.2) lib/active_support/callbacks.rb:86:in run_callbacks'
actionpack (4.1.2) lib/abstract_controller/callbacks.rb:19:in
process_action'
actionpack (4.1.2) lib/action_controller/metal/rescue.rb:29:in process_action'
actionpack (4.1.2) lib/action_controller/metal/instrumentation.rb:31:in
block in process_action'
activesupport (4.1.2) lib/active_support/notifications.rb:159:in block in instrument'
activesupport (4.1.2) lib/active_support/notifications/instrumenter.rb:20:in
instrument'
activesupport (4.1.2) lib/active_support/notifications.rb:159:in instrument'
actionpack (4.1.2) lib/action_controller/metal/instrumentation.rb:30:in
process_action'
actionpack (4.1.2) lib/action_controller/metal/params_wrapper.rb:250:in process_action'
activerecord (4.1.2) lib/active_record/railties/controller_runtime.rb:18:in
process_action'
actionpack (4.1.2) lib/abstract_controller/base.rb:136:in process'
actionview (4.1.2) lib/action_view/rendering.rb:30:in
process'
actionpack (4.1.2) lib/action_controller/metal.rb:196:in dispatch'
actionpack (4.1.2) lib/action_controller/metal/rack_delegation.rb:13:in
dispatch'
actionpack (4.1.2) lib/action_controller/metal.rb:232:in block in action'
actionpack (4.1.2) lib/action_dispatch/routing/route_set.rb:82:in
call'
actionpack (4.1.2) lib/action_dispatch/routing/route_set.rb:82:in dispatch'
actionpack (4.1.2) lib/action_dispatch/routing/route_set.rb:50:in
call'
actionpack (4.1.2) lib/action_dispatch/journey/router.rb:71:in block in call'
actionpack (4.1.2) lib/action_dispatch/journey/router.rb:59:in
each'
actionpack (4.1.2) lib/action_dispatch/journey/router.rb:59:in call'
actionpack (4.1.2) lib/action_dispatch/routing/route_set.rb:678:in
call'
rack (1.5.2) lib/rack/etag.rb:23:in call'
rack (1.5.2) lib/rack/conditionalget.rb:25:in
call'
rack (1.5.2) lib/rack/head.rb:11:in call'
actionpack (4.1.2) lib/action_dispatch/middleware/params_parser.rb:27:in
call'
actionpack (4.1.2) lib/action_dispatch/middleware/flash.rb:254:in call'
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in
context'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in call'
actionpack (4.1.2) lib/action_dispatch/middleware/cookies.rb:560:in
call'
activerecord (4.1.2) lib/active_record/query_cache.rb:36:in call'
activerecord (4.1.2) lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in
call'
activerecord (4.1.2) lib/active_record/migration.rb:380:in call'
actionpack (4.1.2) lib/action_dispatch/middleware/callbacks.rb:29:in
block in call'
activesupport (4.1.2) lib/active_support/callbacks.rb:82:in run_callbacks'
actionpack (4.1.2) lib/action_dispatch/middleware/callbacks.rb:27:in
call'
actionpack (4.1.2) lib/action_dispatch/middleware/reloader.rb:73:in call'
actionpack (4.1.2) lib/action_dispatch/middleware/remote_ip.rb:76:in
call'
actionpack (4.1.2) lib/action_dispatch/middleware/debug_exceptions.rb:17:in call'
actionpack (4.1.2) lib/action_dispatch/middleware/show_exceptions.rb:30:in
call'
railties (4.1.2) lib/rails/rack/logger.rb:38:in call_app'
railties (4.1.2) lib/rails/rack/logger.rb:20:in
block in call'
activesupport (4.1.2) lib/active_support/tagged_logging.rb:68:in block in tagged'
activesupport (4.1.2) lib/active_support/tagged_logging.rb:26:in
tagged'
activesupport (4.1.2) lib/active_support/tagged_logging.rb:68:in tagged'
railties (4.1.2) lib/rails/rack/logger.rb:20:in
call'
actionpack (4.1.2) lib/action_dispatch/middleware/request_id.rb:21:in call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in
call'
rack (1.5.2) lib/rack/runtime.rb:17:in call'
activesupport (4.1.2) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in
call'
rack (1.5.2) lib/rack/lock.rb:17:in call'
actionpack (4.1.2) lib/action_dispatch/middleware/static.rb:64:in
call'
rack (1.5.2) lib/rack/sendfile.rb:112:in call'
railties (4.1.2) lib/rails/engine.rb:514:in
call'
railties (4.1.2) lib/rails/application.rb:144:in call'
rack (1.5.2) lib/rack/lock.rb:17:in
call'
rack (1.5.2) lib/rack/content_length.rb:14:in call'
rack (1.5.2) lib/rack/handler/webrick.rb:60:in
service'
C:/Ruby200-x64/lib/ruby/2.0.0/webrick/httpserver.rb:138:in service'
C:/Ruby200-x64/lib/ruby/2.0.0/webrick/httpserver.rb:94:in
run'
C:/Ruby200-x64/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'
【问题讨论】:
【参考方案1】:我真的怀疑这可能是您使用的端口的差异。 HTTPS 应该是 443。试试这个:
def httpwork
require "net/http"
uri = URI("https://yourhost.com/yourpath")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new("/yourpath")
response = http.request(request)
end
【讨论】:
【参考方案2】:本地开发的快速而肮脏的技巧:您可以注释 http.use_ssl = true
行或不注释它并在下面添加以下行:http.verify_mode = OpenSSL::SSL::VERIFY_NONE
每次都对我有用
【讨论】:
以上是关于使用 Ruby on Rails 的 HTTP GET 请求:OpenSSL::SSL::SSLError的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Ruby on Rails 发出 HTTP 请求?
为啥 Ruby on Rails 使用 http://0.0.0.0:3000 而不是 http://localhost:3000?