* io.c (rb_open_file): encoding in mode string was ignored if perm is
[ruby-svn.git] / lib / uri / http.rb
blob87eb8893f2ba9d14964352e66571c212aeb9c39c
2 # = uri/http.rb
4 # Author:: Akira Yamada <akira@ruby-lang.org>
5 # License:: You can redistribute it and/or modify it under the same term as Ruby.
6 # Revision:: $Id$
9 require 'uri/generic'
11 module URI
13   #
14   # The syntax of HTTP URIs is defined in RFC1738 section 3.3.
15   #
16   # Note that the Ruby URI library allows HTTP URLs containing usernames and
17   # passwords. This is not legal as per the RFC, but used to be 
18   # supported in Internet Explorer 5 and 6, before the MS04-004 security 
19   # update. See <URL:http://support.microsoft.com/kb/834489>.
20   #
21   class HTTP < Generic
22     DEFAULT_PORT = 80
24     COMPONENT = [
25       :scheme, 
26       :userinfo, :host, :port, 
27       :path, 
28       :query, 
29       :fragment
30     ].freeze
32     #
33     # == Description
34     #
35     # Create a new URI::HTTP object from components, with syntax checking.
36     #
37     # The components accepted are userinfo, host, port, path, query and
38     # fragment.
39     #
40     # The components should be provided either as an Array, or as a Hash 
41     # with keys formed by preceding the component names with a colon. 
42     #
43     # If an Array is used, the components must be passed in the order
44     # [userinfo, host, port, path, query, fragment].
45     #
46     # Example:
47     #
48     #     newuri = URI::HTTP.build({:host => 'www.example.com', 
49     #       :path> => '/foo/bar'})
50     #
51     #     newuri = URI::HTTP.build([nil, "www.example.com", nil, "/path", 
52     #       "query", 'fragment'])
53     #
54     # Currently, if passed userinfo components this method generates 
55     # invalid HTTP URIs as per RFC 1738.
56     #
57     def self.build(args)
58       tmp = Util::make_components_hash(self, args)
59       return super(tmp)
60     end
62     #
63     # == Description
64     #
65     # Create a new URI::HTTP object from generic URI components as per
66     # RFC 2396. No HTTP-specific syntax checking (as per RFC 1738) is 
67     # performed.
68     #
69     # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+, 
70     # +opaque+, +query+ and +fragment+, in that order.
71     #
72     # Example:
73     #
74     #     uri = URI::HTTP.new(['http', nil, "www.example.com", nil, "/path",
75     #       "query", 'fragment'])
76     #
77     def initialize(*arg)
78       super(*arg)
79     end
81     #
82     # == Description
83     #
84     # Returns the full path for an HTTP request, as required by Net::HTTP::Get.
85     #
86     # If the URI contains a query, the full path is URI#path + '?' + URI#query.
87     # Otherwise, the path is simply URI#path.
88     #
89     def request_uri
90       r = path_query
91       if r[0] != ?/
92         r = '/' + r
93       end
95       r
96     end
97   end
99   @@schemes['HTTP'] = HTTP