1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4 %% Author: Ryan Norton <wxprojects@comcast.net>
8 %% Copyright: (c) Ryan Norton
9 %% License: wxWindows license
10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
12 \section{\class{wxURI
}}\label{wxuri
}
14 wxURI is used to extract information from
15 a URI (Uniform Resource Identifier).
17 For information about URIs, see
18 \urlref{RFC
3986}{http://www.ietf.org/rfc/rfc3986.txt
}.
20 In short, a URL
\em{is
} a URI. In other
21 words, URL is a subset of a URI - all
22 acceptable URLs are also acceptable URIs.
24 wxURI automatically escapes invalid characters in a string,
25 so there is no chance of wxURI "failing" on construction/creation.
27 wxURI supports copy construction and standard assignment
28 operators. wxURI can also be inherited from to provide
29 furthur functionality.
31 \wxheading{Derived from
}
33 \helpref{wxObject
}{wxobject
}
35 \wxheading{Include files
}
39 \latexignore{\rtfignore{\wxheading{Members
}}}
41 \membersection{Obtaining individual components
}\label{obtainingwxuricomponents
}
43 To obtain individual components you can use
44 one of the following methods
46 \helpref{GetScheme
}{wxurigetscheme
}\\
47 \helpref{GetUserInfo
}{wxurigetuserinfo
}\\
48 \helpref{GetServer
}{wxurigetserver
}\\
49 \helpref{GetPort
}{wxurigetserver
}\\
50 \helpref{GetPath
}{wxurigetpath
}\\
51 \helpref{GetQuery
}{wxurigetquery
}\\
52 \helpref{GetFragment
}{wxurigetfragment
}
54 However, you should check HasXXX before
55 calling a get method, which determines whether or not the component referred
56 to by the method is defined according to RFC
2396.
58 Consider an undefined component equivalent to a
61 \helpref{HasScheme
}{wxurihasscheme
}\\
62 \helpref{HasUserInfo
}{wxurihasuserinfo
}\\
63 \helpref{HasServer
}{wxurihasserver
}\\
64 \helpref{HasPort
}{wxurihasserver
}\\
65 \helpref{HasPath
}{wxurihaspath
}\\
66 \helpref{HasQuery
}{wxurihasquery
}\\
67 \helpref{HasFragment
}{wxurihasfragment
}
71 //protocol will hold the http protocol (i.e. "http")
73 wxURI myuri(wxT("http://mysite.com"));
75 protocol = myuri.GetScheme();
78 \membersection{Deviations from the RFC
}\label{deviationsfromrfc
}
80 Note that on URIs with a "file" scheme wxURI does not
81 parse the userinfo, server, or port portion. This is to keep
82 compatability with wxFileSystem, the old wxURL, and older url specifications.
84 \membersection{wxURI::wxURI
}\label{wxuriwxuri
}
90 \func{}{wxURI
}{\param{const wxChar*
}{uri
}}
92 Constructor for quick creation.
94 \docparam{uri
}{string to initialize with
}
96 \func{}{wxURI
}{\param{const wxURI\&
}{uri
}}
98 Copies this URI from another URI.
100 \docparam{uri
}{URI (Uniform Resource Identifier) to initialize with
}
103 \membersection{wxURI::BuildURI
}\label{wxuribuilduri
}
105 \constfunc{wxString
}{BuildURI
}{\void}
107 Builds the URI from its individual components and adds proper separators.
109 If the URI is not a reference or is not resolved,
110 the URI that is returned from Get is the same one
114 \membersection{wxURI::BuildUnescapedURI
}\label{wxuribuildunescapeduri
}
116 \constfunc{wxString
}{BuildUnescapedURI
}{\void}
118 Builds the URI from its individual components, adds proper separators, and
119 returns escape sequences to normal characters.
121 Note that it is preferred to call this over Unescape(BuildURI()) since
122 \helpref{BuildUnescapedURI
}{wxuribuildunescapeduri
} performs some optimizations over the plain method.
125 \membersection{wxURI::Create
}\label{wxuricreate
}
127 \func{const wxChar*
}{Create
}{\param{const wxString&
}{uri
}}
129 Creates this URI from the string
\arg{uri
}.
131 Returns the position at which parsing stopped (there
132 is no such thing as an "invalid" wxURI).
134 \docparam{uri
}{string to initialize from
}
137 \membersection{wxURI::GetFragment
}\label{wxurigetfragment
}
139 \constfunc{const wxString&
}{GetFragment
}{\void}
141 Obtains the fragment of this URI.
143 The fragment of a URI is the last value of the URI,
144 and is the value after a '#' character after the path
147 \tt{http://mysite.com/mypath\#<fragment>
}
149 \membersection{wxURI::GetHostType
}\label{wxurigethosttype
}
151 \constfunc{const HostType\&
}{GetHostType
}{\void}
153 Obtains the host type of this URI, which is of type
157 \begin{twocollist
}\itemsep=
0pt
158 \twocolitem{{\bf wxURI
\_REGNAME}}{Server is a host name, or the Server component itself is undefined.
}
159 \twocolitem{{\bf wxURI
\_IPV4ADDRESS}}{Server is a IP version
4 address (XXX.XXX.XXX.XXX)
}
160 \twocolitem{{\bf wxURI
\_IPV6ADDRESS}}{Server is a IP version
6 address ((XXX:)XXX::(XXX)XXX:XXX
}
161 \twocolitem{{\bf wxURI
\_IPVFUTURE}}{Server is an IP address, but not versions
4 or
6}
165 \membersection{wxURI::GetPassword
}\label{wxurigetpassword
}
167 \constfunc{const wxString&
}{GetPassword
}{\void}
169 Returns the password part of the userinfo component of
170 this URI. Note that this is explicitly depreciated by
171 RFC
1396 and should generally be avoided if possible.
173 \tt{http://<user>:<password>@mysite.com/mypath
}
176 \membersection{wxURI::GetPath
}\label{wxurigetpath
}
178 \constfunc{const wxString&
}{GetPath
}{\void}
180 Returns the (normalized) path of the URI.
182 The path component of a URI comes
183 directly after the scheme component
184 if followed by zero or one slashes ('/'),
185 or after the server/port component.
187 Absolute paths include the leading '/'
190 \tt{http://mysite.com<path>
}
192 \membersection{wxURI::GetPort
}\label{wxurigetport
}
194 \constfunc{const wxString&
}{GetPort
}{\void}
196 Returns a string representation of the URI's port.
198 The Port of a URI is a value after the server, and
199 must come after a colon (:).
201 \tt{http://mysite.com:<port>
}
203 Note that you can easily get the numeric value of the port
204 by using wxAtoi or wxString::Format.
206 \membersection{wxURI::GetQuery
}\label{wxurigetquery
}
208 \constfunc{const wxString&
}{GetQuery
}{\void}
210 Returns the Query component of the URI.
212 The query component is what is commonly passed to a
213 cgi application, and must come after the path component,
214 and after a '?' character.
216 \tt{http://mysite.com/mypath?<query>
}
219 \membersection{wxURI::GetScheme
}\label{wxurigetscheme
}
221 \constfunc{const wxString&
}{GetScheme
}{\void}
223 Returns the Scheme component of the URI.
225 The first part of the uri.
227 \tt{<scheme>://mysite.com
}
230 \membersection{wxURI::GetServer
}\label{wxurigetserver
}
232 \constfunc{const wxString&
}{GetServer
}{\void}
234 Returns the Server component of the URI.
236 The server of the uri can be a server name or
237 a type of ip address. See
238 \helpref{GetHostType
}{wxurigethosttype
} for the
239 possible values for the host type of the
242 \tt{http://<server>/mypath
}
245 \membersection{wxURI::GetUser
}\label{wxurigetuser
}
247 \constfunc{const wxString&
}{GetUser
}{\void}
249 Returns the username part of the userinfo component of
250 this URI. Note that this is explicitly depreciated by
251 RFC
1396 and should generally be avoided if possible.
253 \tt{http://<user>:<password>@mysite.com/mypath
}
256 \membersection{wxURI::GetUserInfo
}\label{wxurigetuserinfo
}
258 \constfunc{const wxString&
}{GetUserInfo
}{\void}
260 Returns the UserInfo component of the URI.
262 The component of a URI before the server component
263 that is postfixed by a '@' character.
265 \tt{http://<userinfo>@mysite.com/mypath
}
268 \membersection{wxURI::HasFragment
}\label{wxurihasfragment
}
270 \constfunc{bool
}{HasFragment
}{\void}
272 Returns
\true if the Fragment component of the URI exists.
275 \membersection{wxURI::HasPath
}\label{wxurihaspath
}
277 \constfunc{bool
}{HasPath
}{\void}
279 Returns
\true if the Path component of the URI exists.
282 \membersection{wxURI::HasPort
}\label{wxurihasport
}
284 \constfunc{bool
}{HasPort
}{\void}
286 Returns
\true if the Port component of the URI exists.
289 \membersection{wxURI::HasQuery
}\label{wxurihasquery
}
291 \constfunc{bool
}{HasQuery
}{\void}
293 Returns
\true if the Query component of the URI exists.
296 \membersection{wxURI::HasScheme
}\label{wxurihasscheme
}
298 \constfunc{bool
}{HasScheme
}{\void}
300 Returns
\true if the Scheme component of the URI exists.
303 \membersection{wxURI::HasServer
}\label{wxurihasserver
}
305 \constfunc{bool
}{HasServer
}{\void}
307 Returns
\true if the Server component of the URI exists.
310 \membersection{wxURI::HasUser
}\label{wxurihasuserinfo
}
312 \constfunc{bool
}{HasUser
}{\void}
314 Returns
\true if the User component of the URI exists.
317 \membersection{wxURI::IsReference
}\label{wxuriisreference
}
319 \constfunc{bool
}{IsReference
}{\void}
321 Returns
\true if a valid
[absolute
] URI, otherwise this URI
322 is a URI reference and not a full URI, and IsReference
326 \membersection{wxURI::operator ==
}\label{wxurioperatorcompare
}
328 \func{void
}{operator ==
}{\param{const wxURI\&
}{uricomp
}}
330 Compares this URI to another URI, and returns
\true if
331 this URI equals
\arg{uricomp
}, otherwise it returns
\false.
333 \docparam{uricomp
}{URI to compare to
}
336 \membersection{wxURI::Resolve
}\label{wxuriresolve
}
338 \func{void
}{Resolve
}{\param{const wxURI\&
}{base
},
\param{int
}{flags =
\texttt{wxURI
\_STRICT}}}
340 Inherits this URI from a base URI - components that do not
341 exist in this URI are copied from the base, and if this URI's
342 path is not an absolute path (prefixed by a '/'), then this URI's
343 path is merged with the base's path.
345 For instance, resolving "../mydir" from "http://mysite.com/john/doe"
346 results in the scheme (http) and server (mysite.com) being copied into
347 this URI, since they do not exist. In addition, since the path
348 of this URI is not absolute (does not begin with '/'), the path
349 of the base's is merged with this URI's path, resulting in the URI
350 "http://mysite.com/john/mydir".
352 \docparam{base
}{Base URI to inherit from. Must be a full URI and not a reference
}
353 \docparam{flags
}{Currently either
\texttt{wxURI
\_STRICT} or $
0$, in non-strict
354 mode some compatibility layers are enabled to allow loopholes from RFCs prior
357 \membersection{wxURI::Unescape
}\label{wxuriunescape
}
359 \func{wxString
}{Unescape
}{\param{const wxString\&
}{uri
}}
361 Translates all escape sequences (
% hex hex) of \arg{uri} into
362 normal characters and returns the result.
364 This is the preferred over deprecated wxURL::ConvertFromURI.
366 If you want to unescape an entire wxURI, use
\helpref{BuildUnescapedURI
}{wxuribuildunescapeduri
} instead,
367 as it performs some optimizations over this method.
369 \docparam{uri
}{string with escaped characters to convert
}