我正在尝试使用Net::HTTP.get()https网址:
@data = Net::HTTP.get(uri, Net::HTTP.https_default_port())
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试打印结果时,我得到以下结果:
无法将URI :: HTTPS转换为String
这是怎么回事?我正在使用Ruby 1.8.7(OS X)
ste*_*tef 145
原始答案:
uri = URI.parse("https://example.com/some/path")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
@data = http.get(uri.request_uri)
Run Code Online (Sandbox Code Playgroud)
正如评论中指出的那样,这更优雅:
require "open-uri"
@data = URI.parse("https://example.com/some/path").read
Run Code Online (Sandbox Code Playgroud)
eeb*_*sen 32
编辑:我的方法有效,但@ jason-yeo的方法要容易得多.
从2.1.2开始,首选的文档化方法如下(直接引用文档):
通过#use_ssl =为HTTP连接启用HTTPS.
Run Code Online (Sandbox Code Playgroud)uri = URI('https://secure.example.com/some_path?query=string') Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http| request = Net::HTTP::Get.new uri response = http.request request # Net::HTTPResponse object end在以前的Ruby版本中,您需要使用'net/https'来使用HTTPS.这不再是真的.
Jas*_*Yeo 17
在Ruby 2.0.0及更高版本中,只需使用httpsurl 传入uri对象就足以执行HTTPS get请求.
uri = URI('https://encrypted.google.com')
Net::HTTP.get(uri)
Run Code Online (Sandbox Code Playgroud)
您可以通过在具有过期证书的域上执行get请求来验证这一点.
uri = URI('https://expired.badssl.com/')
Net::HTTP.get(uri)
# OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
Run Code Online (Sandbox Code Playgroud)
它是由Ruby 2.0.0中的这个提交引入的.
该get_response方法调用的Net::HTTP.get方法在"https" 时设置 :use_ssl为true uri.scheme.
免责声明:我理解这个问题适用于Ruby 1.8.7,但由于这是搜索"https ruby"时搜索结果最少的搜索结果之一,所以无论如何我决定回答.
| 归档时间: |
|
| 查看次数: |
73647 次 |
| 最近记录: |