2011-06-14 72 views
5

做一个网:: HTTP HTTPS请求,而不以块的形式,你可以这样做:使用Net :: HTTP的块格式的HTTPS请求 - 有可能吗?

... 
http = Net::HTTP.new(url.host, url.port) 
http.use_ssl = true 
... 

但是,有没有办法告诉的Net :: HTTP在做以块的形式时,使用https?

u = URI.parse(url) 
Net::HTTP.start(u.host, u.port) do |http| 
    # if I put http.use_ssl = true here, ruby complains that this can't 
    # be done becuase the sesion has already started 
    resp = http.get(u.request_uri) 
end 

我在红宝石1.8.7

回答

17

见这需要一个可选的哈希Net::HTTP.start的文档。从文档:

选择设置以下值由其访问者。密钥是ca_file,ca_path,cert,cert_store,cipher,close_on_empty_response,key,open_timeout,read_timeout,ssl_timeout,ssl_version,use_ssl,verify_callback,verify_depth和verify_mode。如果将use_ssl设置为true,则可以使用https,并将verify_mode的默认值设置为OpenSSL :: SSL :: VERIFY_PEER。

Net::HTTP.start(url.host, url.port, :use_ssl => true) 
+0

忘了提,我对[1.8.7](http://rubydoc.info/stdlib/net/1.8.7/Net/HTTP.start) – 2011-06-14 19:18:17

+0

@约翰然后你可以不行。 Ruby 1.8.7没有此方法签名。不幸的是,如果你想设置'use_ssl',你将无法使用块形式。你当然可以在1.9.2版本的补丁中修补:https://gist.github.com/2cdc187fa0c7b608fe2c – 2011-06-14 21:57:36

+0

哦,甜心:--D – 2011-06-15 00:34:42