123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
- "http://www.w3.org/TR/html4/strict.dtd">
- <html>
- <head>
- <meta name="description" content="LuaSocket: URL manipulation">
- <meta name="keywords" content="Lua, LuaSocket, URL, Library, Link, Network, Support">
- <title>LuaSocket: URL support</title>
- <link rel="stylesheet" href="reference.css" type="text/css">
- </head>
- <body>
- <!-- header +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <div class=header>
- <hr>
- <center>
- <table summary="LuaSocket logo">
- <tr><td align=center><a href="http://www.lua.org">
- <img width=128 height=128 border=0 alt="LuaSocket" src="luasocket.png">
- </a></td></tr>
- <tr><td align=center valign=top>Network support for the Lua language
- </td></tr>
- </table>
- <p class=bar>
- <a href="index.html">home</a> ·
- <a href="index.html#download">download</a> ·
- <a href="installation.html">installation</a> ·
- <a href="introduction.html">introduction</a> ·
- <a href="reference.html">reference</a>
- </p>
- </center>
- <hr>
- </div>
- <!-- url ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <h2 id="url">URL</h2>
- <p>
- The <tt>url</tt> namespace provides functions to parse, protect,
- and build URLs, as well as functions to compose absolute URLs
- from base and relative URLs, according to
- <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>.
- </p>
- <p>
- To obtain the <tt>url</tt> namespace, run:
- </p>
- <pre class=example>
- -- loads the URL module
- local url = require("socket.url")
- </pre>
- <p>
- An URL is defined by the following grammar:
- </p>
- <blockquote>
- <tt>
- <url> ::= [<scheme>:][//<authority>][/<path>][;<params>][?<query>][#<fragment>]<br>
- <authority> ::= [<userinfo>@]<host>[:<port>]<br>
- <userinfo> ::= <user>[:<password>]<br>
- <path> ::= {<segment>/}<segment><br>
- </tt>
- </blockquote>
- <!-- absolute +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <p class=name id="absolute">
- url.<b>absolute(</b>base, relative<b>)</b>
- </p>
- <p class=description>
- Builds an absolute URL from a base URL and a relative URL.
- </p>
- <p class=parameters>
- <tt>Base</tt> is a string with the base URL or
- a parsed URL table. <tt>Relative</tt> is a
- string with the relative URL.
- </p>
- <p class=return>
- The function returns a string with the absolute URL.
- </p>
- <p class=note>
- Note: The rules that
- govern the composition are fairly complex, and are described in detail in
- <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>.
- The example bellow should give an idea of what the rules are.
- </p>
- <pre class=example>
- http://a/b/c/d;p?q
- +
- g:h = g:h
- g = http://a/b/c/g
- ./g = http://a/b/c/g
- g/ = http://a/b/c/g/
- /g = http://a/g
- //g = http://g
- ?y = http://a/b/c/?y
- g?y = http://a/b/c/g?y
- #s = http://a/b/c/d;p?q#s
- g#s = http://a/b/c/g#s
- g?y#s = http://a/b/c/g?y#s
- ;x = http://a/b/c/;x
- g;x = http://a/b/c/g;x
- g;x?y#s = http://a/b/c/g;x?y#s
- . = http://a/b/c/
- ./ = http://a/b/c/
- .. = http://a/b/
- ../ = http://a/b/
- ../g = http://a/b/g
- ../.. = http://a/
- ../../ = http://a/
- ../../g = http://a/g
- </pre>
- <!-- build ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <p class=name id="build">
- url.<b>build(</b>parsed_url<b>)</b>
- </p>
- <p class=description>
- Rebuilds an URL from its parts.
- </p>
- <p class=parameters>
- <tt>Parsed_url</tt> is a table with same components returned by
- <a href="#parse"><tt>parse</tt></a>.
- Lower level components, if specified,
- take precedence over high level components of the URL grammar.
- </p>
- <p class=return>
- The function returns a string with the built URL.
- </p>
- <!-- build_path +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <p class=name id="build_path">
- url.<b>build_path(</b>segments, unsafe<b>)</b>
- </p>
- <p class=description>
- Builds a <tt><path></tt> component from a list of
- <tt><segment></tt> parts.
- Before composition, any reserved characters found in a segment are escaped into
- their protected form, so that the resulting path is a valid URL path
- component.
- </p>
- <p class=parameters>
- <tt>Segments</tt> is a list of strings with the <tt><segment></tt>
- parts. If <tt>unsafe</tt> is anything but <b><tt>nil</tt></b>, reserved
- characters are left untouched.
- </p>
- <p class=return>
- The function returns a string with the
- built <tt><path></tt> component.
- </p>
- <!-- escape +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <p class=name id="escape">
- url.<b>escape(</b>content<b>)</b>
- </p>
- <p class=description>
- Applies the URL escaping content coding to a string
- Each byte is encoded as a percent character followed
- by the two byte hexadecimal representation of its integer
- value.
- </p>
- <p class=parameters>
- <tt>Content</tt> is the string to be encoded.
- </p>
- <p class=result>
- The function returns the encoded string.
- </p>
- <pre class=example>
- -- load url module
- url = require("socket.url")
- code = url.escape("/#?;")
- -- code = "%2f%23%3f%3b"
- </pre>
- <!-- parse ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <p class=name id="parse">
- url.<b>parse(</b>url, default<b>)</b>
- </p>
- <p class=description>
- Parses an URL given as a string into a Lua table with its components.
- </p>
- <p class=parameters>
- <tt>Url</tt> is the URL to be parsed. If the <tt>default</tt> table is
- present, it is used to store the parsed fields. Only fields present in the
- URL are overwritten. Therefore, this table can be used to pass default
- values for each field.
- </p>
- <p class=return>
- The function returns a table with all the URL components:
- </p>
- <blockquote><tt>
- parsed_url = {<br>
- url = <i>string</i>,<br>
- scheme = <i>string</i>,<br>
- authority = <i>string</i>,<br>
- path = <i>string</i>,<br>
- params = <i>string</i>,<br>
- query = <i>string</i>,<br>
- fragment = <i>string</i>,<br>
- userinfo = <i>string</i>,<br>
- host = <i>string</i>,<br>
- port = <i>string</i>,<br>
- user = <i>string</i>,<br>
- password = <i>string</i><br>
- }
- </tt></blockquote>
- <pre class=example>
- -- load url module
- url = require("socket.url")
- parsed_url = url.parse("http://www.example.com/cgilua/index.lua?a=2#there")
- -- parsed_url = {
- -- scheme = "http",
- -- authority = "www.example.com",
- -- path = "/cgilua/index.lua"
- -- query = "a=2",
- -- fragment = "there",
- -- host = "www.puc-rio.br",
- -- }
- parsed_url = url.parse("ftp://root:[email protected]/pub/virus.exe;type=i")
- -- parsed_url = {
- -- scheme = "ftp",
- -- authority = "root:[email protected]",
- -- path = "/pub/virus.exe",
- -- params = "type=i",
- -- userinfo = "root:passwd",
- -- host = "unsafe.org",
- -- user = "root",
- -- password = "passwd",
- -- }
- </pre>
- <!-- parse_path +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <p class=name id="parse_path">
- url.<b>parse_path(</b>path<b>)</b>
- </p>
- <p class=description>
- Breaks a <tt><path></tt> URL component into all its
- <tt><segment></tt> parts.
- </p>
- <p class=description>
- <tt>Path</tt> is a string with the path to be parsed.
- </p>
- <p class=return>
- Since some characters are reserved in URLs, they must be escaped
- whenever present in a <tt><path></tt> component. Therefore, before
- returning a list with all the parsed segments, the function removes
- escaping from all of them.
- </p>
- <!-- unescape +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <p class=name id="unescape">
- url.<b>unescape(</b>content<b>)</b>
- </p>
- <p class=description>
- Removes the URL escaping content coding from a string.
- </p>
- <p class=parameters>
- <tt>Content</tt> is the string to be decoded.
- </p>
- <p class=return>
- The function returns the decoded string.
- </p>
- <!-- footer +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <div class=footer>
- <hr>
- <center>
- <p class=bar>
- <a href="index.html">home</a> ·
- <a href="index.html#down">download</a> ·
- <a href="installation.html">installation</a> ·
- <a href="introduction.html">introduction</a> ·
- <a href="reference.html">reference</a>
- </p>
- <p>
- <small>
- Last modified by Diego Nehab on <br>
- Thu Apr 20 00:26:05 EDT 2006
- </small>
- </p>
- </center>
- </div>
- </body>
- </html>
|