【问题标题】:OpenSSL::SSL::SSLError in Rails while raising HTTP REQUEST引发 HTTP 请求时 Rails 中的 OpenSSL::SSL::SSLError
【发布时间】:2014-05-29 18:06:30
【问题描述】:

我在发出一个 http_request 时收到 OpenSSL::SSL::SSLError。请找到下面提到的代码。

 require 'net/http'
 uri = URI.parse("http://webaddress.com")
 http = Net::HTTP.new(uri.host, uri.port)
 http.use_ssl = true
 http.verify_mode = OpenSSL::SSL::VERIFY_NONE
 request = Net::HTTP::Post.new("/v1.1/auth")
 request.add_field('Content-Type', 'application/json')
 request.body = {"auth_token"=>"abcd"  ,"employee" => {"method" => "add_employee"}}
 response = http.request(request)

它抛出以下错误:

SSL_connect 返回=1 errno=0 state=SSLv2/v3 读取服务器hello A:未知协议

请告诉我为什么会出现这个错误?以及导致此错误的原因。

【问题讨论】:

  • http.use_ssl = true 应该是 false,正如你所说的 http
  • @RajarshiDas 它正在工作。但它为#<0xb4335ec8>
  • &gt;&gt;&gt;

标签: ruby-on-rails ruby http ssl


【解决方案1】:

http.use_ssl = true 应该是 false 你调用 http

应该是

http.use_ssl = false

其次

您正在尝试传递一个哈希 {"auth_token"=&gt;"abcd" ,"employee" =&gt; {"method" =&gt; "add_employee"}} 来发布它希望看到字符串的位置。我想你想要更多这样的东西:

query = {"auth_token"=>"abcd"  ,"employee" => {"method" => "add_employee"}}.to_query

它会创建像"auth_token=abcd&amp;employee%5Bmethod%5D=add_employee" 这样的字符串,你必须把它发送给post

http.post(uri.path, query, headers)

请试试这个

 require 'net/http'
 uri = URI.parse("http://webaddress.com/v1.1/auth")
 http = Net::HTTP.new(uri.host, uri.port)
 http.use_ssl = false
 http.verify_mode = OpenSSL::SSL::VERIFY_NONE

 response = http.post(uri.path,{"auth_token"=>"abcd", "employee" => {"method" => "add_employee"}}.to_query)

查看以下链接了解更多信息 http://ruby-doc.org/stdlib-1.9.3/libdoc/net/http/rdoc/Net/HTTP.html#method-i-post

[33] pry(main)> uri = URI.parse("http://webaddress.com/v1.1/auth") 
=> #<URI::HTTP:0x000000098f9928 URL:http://webaddress.com/v1.1/auth>
[34] pry(main)> http = Net::HTTP.new(uri.host, uri.port) 
=> #<Net::HTTP webaddress.com:80 open=false>
[35] pry(main)> http.use_ssl = false 
=> false
[36] pry(main)> http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
=> 0

[38] pry(main)> response = http.post(uri.path,{"auth_token"=>"abcd", "employee" =>    {"method" => "add_employee"}}.to_query) 
=> #<Net::HTTPFound 302 Found readbody=true>
[39] pry(main)> response.body
=> ""

【讨论】:

  • 谢谢。它返回 #<:httpok ok readbody="true"> 。我想查看响应消息。如何检查?
  • response.body 会给出结果
  • 我肯定会给.. 但现在它抛出“内部服务器错误”
  • 我已经更改了它只是复制粘贴我的代码我得到不同的不是内部服务器错误
  • v1.1/auth 是什么意思?
猜你喜欢
  • 2014-08-31
  • 1970-01-01
  • 2015-10-12
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多