【问题标题】:How to Parse uri in ruby without Authentication如何在没有身份验证的情况下解析 ruby​​ 中的 uri
【发布时间】:2018-08-10 02:30:02
【问题描述】:

我的代码,

require 'net/http'
require 'json'

url = 'http://api.spotify.com/v1/search?type=artist&q=tycho'
uri = URI(url)
response = Net::HTTP.get(uri)
JSON.parse(response)
puts(response)

只要它是 http,它就可以工作,但它是 https 的实例它会失败并出现身份验证错误。

实际错误: SSL_connect returned=1 errno=0 state=error: 证书验证失败(错误号 1)(OpenSSL::SSL::SSLError)

在 Curl 中,我可以使用不安全模式,这有助于获得如下示例所示的结果:

curl --insecure -X GET -H "content-type: application/json" -H "Accept: application/json" -d '{}' "http://api.spotify.com/v1/search?type=artist&q=tycho"

“net/http”方法的等效方法是什么,我可以添加不安全或验证=false。

我将使用输出在 CHEF 中附加一个食谱。

注意:正确的 URI 会有所不同,而不是上面链接中提到的那个

非常感谢任何线索。

谢谢 阿尼什

【问题讨论】:

  • verify_mode 选项设置为OpenSSL::SSL::VERIFY_NONE,如Net::HTTP.start(uri.host, uri.port, verify_mode: OpenSSL::SSL::VERIFY_NONE)
  • 你也可以依赖系统curl:response = %x[curl --insecure ....]
  • @mudasobwa,是否有您可以提供的示例脚本,很难调试您提供的解决方案。请
  • Net::HTTP 上的文档页面充满了这些示例。

标签: ruby-on-rails ruby chef-infra chef-recipe cookbook


【解决方案1】:

要关闭证书验证,试试这个:

require 'net/http'
require 'json'
require 'openssl'

url = 'https://api.spotify.com/v1/search?type=artist&q=tycho'
uri = URI(url)
http = Net::HTTP.new(uri.host, uri.port)

http.use_ssl     = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

response = http.request_get(uri.path).body
JSON.parse(response)
puts(response)

【讨论】:

  • 回溯(最近一次通话最后一次):8:来自 sara.rb:7:in <main>' 1: from /usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/net/protocol.rb:44:in ssl_socket_connect' /usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5。 0/net/protocol.rb:44:in `connect_nonblock': SSL_connect returned=1 errno=0 state=error: 证书验证失败(错误号 1)(OpenSSL::SSL::SSLError)
  • 请注意,您必须设置use_ssl AND verify_mode。两者都需要设置。
  • 像魅力一样工作,因为我只希望 json 输出更改最后一行 response = http.request_get(uri).body
猜你喜欢
  • 2022-11-30
  • 1970-01-01
  • 2020-12-08
  • 2022-01-03
  • 2013-04-21
  • 2018-04-15
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多