mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/net/http.rb: net/https is merged.
* ext/openssl/lib/net/https.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5898 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
76d2e91b4b
commit
fc188d3827
3 changed files with 99 additions and 94 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Sat Mar 6 02:00:19 2004 Minero Aoki <aamine@loveruby.net>
|
||||||
|
|
||||||
|
* lib/net/http.rb: net/https is merged.
|
||||||
|
|
||||||
|
* ext/openssl/lib/net/https.rb: ditto.
|
||||||
|
|
||||||
Fri Mar 6 00:39:21 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
|
Fri Mar 6 00:39:21 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
|
||||||
|
|
||||||
* oniggnu.h: imported from Oniguruma library.
|
* oniggnu.h: imported from Oniguruma library.
|
||||||
|
|
|
@ -33,7 +33,7 @@ Simple HTTP client is here:
|
||||||
path = $3
|
path = $3
|
||||||
end
|
end
|
||||||
h = Net::HTTP.new(host, port)
|
h = Net::HTTP.new(host, port)
|
||||||
h.get2(path){ |resp| print resp.body }
|
h.request_get(path) {|res| print res.body }
|
||||||
|
|
||||||
It can be replaced by follow one:
|
It can be replaced by follow one:
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ It can be replaced by follow one:
|
||||||
end
|
end
|
||||||
h = Net::HTTP.new(host, port)
|
h = Net::HTTP.new(host, port)
|
||||||
h.use_ssl = true if scheme == "https" # enable SSL/TLS
|
h.use_ssl = true if scheme == "https" # enable SSL/TLS
|
||||||
h.get2(path){ |resp| print resp.body }
|
h.request_get(path) {|res| print res.body }
|
||||||
|
|
||||||
=== Instance Methods
|
=== Instance Methods
|
||||||
|
|
||||||
|
@ -98,91 +98,5 @@ It can be replaced by follow one:
|
||||||
|
|
||||||
=end
|
=end
|
||||||
|
|
||||||
require 'net/protocols'
|
# HTTPS implementation is merged in to net/http.
|
||||||
require 'net/http'
|
require 'net/http'
|
||||||
|
|
||||||
module Net
|
|
||||||
class HTTP
|
|
||||||
class Conn < HTTPRequest
|
|
||||||
REQUEST_HAS_BODY=false
|
|
||||||
RESPONSE_HAS_BODY=false
|
|
||||||
METHOD="connect"
|
|
||||||
|
|
||||||
def initialize
|
|
||||||
super nil, nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def exec( sock, addr, port, ver )
|
|
||||||
@socket = sock
|
|
||||||
request(addr, port, ver)
|
|
||||||
end
|
|
||||||
|
|
||||||
def request( addr, port, ver )
|
|
||||||
@socket.writeline sprintf('CONNECT %s:%s HTTP/%s', addr, port, ver)
|
|
||||||
@socket.writeline ''
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module ProxyMod
|
|
||||||
def edit_path( path )
|
|
||||||
if use_ssl
|
|
||||||
'https://' + addr_port + path
|
|
||||||
else
|
|
||||||
'http://' + addr_port + path
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.socket_type
|
|
||||||
SSLIO
|
|
||||||
end
|
|
||||||
|
|
||||||
attr_reader :use_ssl
|
|
||||||
attr_writer :key, :cert
|
|
||||||
attr_writer :ca_file, :ca_path
|
|
||||||
attr_writer :verify_mode, :verify_callback, :verify_depth
|
|
||||||
attr_writer :cert_store, :timeout
|
|
||||||
attr_reader :peer_cert
|
|
||||||
|
|
||||||
alias :default_initialize :initialize
|
|
||||||
|
|
||||||
def initialize(*args)
|
|
||||||
default_initialize(*args)
|
|
||||||
@key = @cert = @ca_file = @ca_path = @verify_mode =
|
|
||||||
@verify_callback = @verify_depth = @timeout = @cert_store = nil
|
|
||||||
@already_connected = false
|
|
||||||
end
|
|
||||||
|
|
||||||
def use_ssl=(flag)
|
|
||||||
if @already_connected && !@use_ssl
|
|
||||||
raise ProtocolError, "connection is alrady set up"
|
|
||||||
end
|
|
||||||
@use_ssl = flag
|
|
||||||
end
|
|
||||||
|
|
||||||
def on_connect
|
|
||||||
if use_ssl
|
|
||||||
if proxy?
|
|
||||||
Conn.new.exec(@socket, @address, @port, "1.0")
|
|
||||||
resp = HTTPResponse.read_new(@socket)
|
|
||||||
if resp.code != '200'
|
|
||||||
raise resp.message
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@socket.key = @key if @key
|
|
||||||
@socket.cert = @cert if @cert
|
|
||||||
@socket.ca_file = @ca_file
|
|
||||||
@socket.ca_path = @ca_path
|
|
||||||
@socket.verify_mode = @verify_mode
|
|
||||||
@socket.verify_callback = @verify_callback
|
|
||||||
@socket.verify_depth = @verify_depth
|
|
||||||
@socket.timeout = @timeout
|
|
||||||
@socket.cert_store = @cert_store
|
|
||||||
@socket.ssl_connect
|
|
||||||
@peer_cert = @socket.peer_cert
|
|
||||||
end
|
|
||||||
@already_connected = true
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
|
|
||||||
require 'net/protocol'
|
require 'net/protocol'
|
||||||
require 'uri'
|
require 'uri'
|
||||||
|
begin
|
||||||
|
require 'net/protocols'
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
module Net # :nodoc:
|
module Net # :nodoc:
|
||||||
|
@ -305,9 +309,19 @@ module Net # :nodoc:
|
||||||
|
|
||||||
# The default port to use for HTTP requests; defaults to 80.
|
# The default port to use for HTTP requests; defaults to 80.
|
||||||
def HTTP.default_port
|
def HTTP.default_port
|
||||||
|
http_default_port()
|
||||||
|
end
|
||||||
|
|
||||||
|
# The default port to use for HTTP requests; defaults to 80.
|
||||||
|
def HTTP.http_default_port
|
||||||
80
|
80
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# The default port to use for HTTPS requests; defaults to 80.
|
||||||
|
def HTTP.https_default_port
|
||||||
|
443
|
||||||
|
end
|
||||||
|
|
||||||
def HTTP.socket_type #:nodoc: obsolete
|
def HTTP.socket_type #:nodoc: obsolete
|
||||||
InternetMessageIO
|
InternetMessageIO
|
||||||
end
|
end
|
||||||
|
@ -352,6 +366,19 @@ module Net # :nodoc:
|
||||||
@read_timeout = 60
|
@read_timeout = 60
|
||||||
|
|
||||||
@debug_output = nil
|
@debug_output = nil
|
||||||
|
|
||||||
|
# ssl
|
||||||
|
@use_ssl = false
|
||||||
|
@key = nil
|
||||||
|
@cert = nil
|
||||||
|
@ca_file = nil
|
||||||
|
@ca_path = nil
|
||||||
|
@verify_mode = nil
|
||||||
|
@verify_callback = nil
|
||||||
|
@verify_depth = nil
|
||||||
|
@ssl_timeout = nil
|
||||||
|
@cert_store = nil
|
||||||
|
@peer_cert = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def inspect
|
def inspect
|
||||||
|
@ -403,6 +430,31 @@ module Net # :nodoc:
|
||||||
|
|
||||||
attr_accessor :close_on_empty_response
|
attr_accessor :close_on_empty_response
|
||||||
|
|
||||||
|
# returns true if use SSL/TLS with HTTP.
|
||||||
|
def use_ssl?
|
||||||
|
@use_ssl
|
||||||
|
end
|
||||||
|
|
||||||
|
alias use_ssl use_ssl? #:nodoc:
|
||||||
|
|
||||||
|
# turn on/off SSL.
|
||||||
|
# This flag must be set before starting session.
|
||||||
|
# If you change use_ssl value after session started,
|
||||||
|
# a Net::HTTP object raises IOError.
|
||||||
|
def use_ssl=(flag)
|
||||||
|
flag = (flag ? true : false)
|
||||||
|
raise IOError, "use_ssl value changed but session already started" if started? and @use_ssl != flag
|
||||||
|
@use_ssl = flag
|
||||||
|
end
|
||||||
|
|
||||||
|
attr_writer :key, :cert
|
||||||
|
attr_writer :ca_file, :ca_path
|
||||||
|
attr_writer :verify_mode, :verify_callback, :verify_depth
|
||||||
|
attr_writer :cert_store, :ssl_timeout
|
||||||
|
attr_reader :peer_cert
|
||||||
|
|
||||||
|
alias timeout= ssl_timeout= # for backward compatibility
|
||||||
|
|
||||||
# Opens TCP connection and HTTP session.
|
# Opens TCP connection and HTTP session.
|
||||||
#
|
#
|
||||||
# When this method is called with block, gives a HTTP object
|
# When this method is called with block, gives a HTTP object
|
||||||
|
@ -427,9 +479,34 @@ module Net # :nodoc:
|
||||||
end
|
end
|
||||||
|
|
||||||
def do_start
|
def do_start
|
||||||
@socket = self.class.socket_type.open(conn_address(), conn_port(),
|
if use_ssl?
|
||||||
@open_timeout, @read_timeout,
|
require 'net/protocols'
|
||||||
@debug_output)
|
sockclass = SSLIO
|
||||||
|
else
|
||||||
|
sockclass = InternetMessageIO
|
||||||
|
end
|
||||||
|
@socket = sockclass.open(conn_address(), conn_port(),
|
||||||
|
@open_timeout, @read_timeout, @debug_output)
|
||||||
|
if use_ssl?
|
||||||
|
if proxy?
|
||||||
|
@socket.writeline sprintf('CONNECT %s:%s HTTP/%s',
|
||||||
|
@address, @port, HTTP_VERSION)
|
||||||
|
@socket.writeline ''
|
||||||
|
res = HTTPResponse.read_new(@socket)
|
||||||
|
res.value
|
||||||
|
end
|
||||||
|
@socket.key = @key if @key
|
||||||
|
@socket.cert = @cert if @cert
|
||||||
|
@socket.ca_file = @ca_file
|
||||||
|
@socket.ca_path = @ca_path
|
||||||
|
@socket.verify_mode = @verify_mode
|
||||||
|
@socket.verify_callback = @verify_callback
|
||||||
|
@socket.verify_depth = @verify_depth
|
||||||
|
@socket.timeout = @ssl_timeout
|
||||||
|
@socket.cert_store = @cert_store
|
||||||
|
@socket.ssl_connect
|
||||||
|
@peer_cert = @socket.peer_cert
|
||||||
|
end
|
||||||
on_connect
|
on_connect
|
||||||
@started = true
|
@started = true
|
||||||
end
|
end
|
||||||
|
@ -565,7 +642,11 @@ module Net # :nodoc:
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit_path(path)
|
def edit_path(path)
|
||||||
'http://' + addr_port() + path
|
if use_ssl?
|
||||||
|
"https://#{addr_port()}#{path}"
|
||||||
|
else
|
||||||
|
"http://#{addr_port()}#{path}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -944,7 +1025,11 @@ module Net # :nodoc:
|
||||||
private
|
private
|
||||||
|
|
||||||
def addr_port
|
def addr_port
|
||||||
address + (port == HTTP.default_port ? '' : ":#{port}")
|
if use_ssl?
|
||||||
|
address() + (port == HTTP.https_default_port ? '' : ":#{port()}")
|
||||||
|
else
|
||||||
|
address() + (port == HTTP.http_default_port ? '' : ":#{port()}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def D(msg)
|
def D(msg)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue