summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/luasocket/doc/url.html
blob: 6ff673da565f19449735d8ce16ebb5229fa94050 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
<!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> &middot;
<a href="index.html#download">download</a> &middot;
<a href="installation.html">installation</a> &middot;
<a href="introduction.html">introduction</a> &middot;
<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>
&lt;url&gt; ::= [&lt;scheme&gt;:][//&lt;authority&gt;][/&lt;path&gt;][;&lt;params&gt;][?&lt;query&gt;][#&lt;fragment&gt;]<br>
&lt;authority&gt; ::= [&lt;userinfo&gt;@]&lt;host&gt;[:&lt;port&gt;]<br>
&lt;userinfo&gt; ::= &lt;user&gt;[:&lt;password&gt;]<br>
&lt;path&gt; ::= {&lt;segment&gt;/}&lt;segment&gt;<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>&lt;path&gt;</tt> component from  a list of
<tt>&lt;segment&gt;</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>&lt;segment&gt;</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>&lt;path&gt;</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>
&nbsp;&nbsp;url = <i>string</i>,<br>
&nbsp;&nbsp;scheme = <i>string</i>,<br>
&nbsp;&nbsp;authority = <i>string</i>,<br>
&nbsp;&nbsp;path = <i>string</i>,<br>
&nbsp;&nbsp;params = <i>string</i>,<br>
&nbsp;&nbsp;query = <i>string</i>,<br>
&nbsp;&nbsp;fragment = <i>string</i>,<br>
&nbsp;&nbsp;userinfo = <i>string</i>,<br>
&nbsp;&nbsp;host = <i>string</i>,<br>
&nbsp;&nbsp;port = <i>string</i>,<br>
&nbsp;&nbsp;user = <i>string</i>,<br>
&nbsp;&nbsp;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:passwd@unsafe.org/pub/virus.exe;type=i")
-- parsed_url = {
--   scheme = "ftp",
--   authority = "root:passwd@unsafe.org",
--   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>&lt;path&gt;</tt> URL component into all its 
<tt>&lt;segment&gt;</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>&lt;path&gt;</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> &middot;
<a href="index.html#down">download</a> &middot;
<a href="installation.html">installation</a> &middot;
<a href="introduction.html">introduction</a> &middot;
<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>