File: Netcgi.cgi.html

package info (click to toggle)
ocamlnet 2.2.9-8
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 17,724 kB
  • ctags: 10,053
  • sloc: ml: 63,928; ansic: 1,973; makefile: 800; sh: 651
file content (323 lines) | stat: -rw-r--r-- 22,950 bytes parent folder | download | duplicates (2)
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<link rel="Start" href="index.html">
<link rel="previous" href="Netcgi.cgi_environment.html">
<link rel="next" href="Netcgi.cgi_activation.html">
<link rel="Up" href="Netcgi.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of class attributes" rel=Appendix href="index_attributes.html">
<link title="Index of class methods" rel=Appendix href="index_methods.html">
<link title="Index of classes" rel=Appendix href="index_classes.html">
<link title="Index of class types" rel=Appendix href="index_class_types.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Index of module types" rel=Appendix href="index_module_types.html">
<link title="Uq_gtk" rel="Chapter" href="Uq_gtk.html">
<link title="Equeue" rel="Chapter" href="Equeue.html">
<link title="Unixqueue" rel="Chapter" href="Unixqueue.html">
<link title="Uq_engines" rel="Chapter" href="Uq_engines.html">
<link title="Uq_socks5" rel="Chapter" href="Uq_socks5.html">
<link title="Unixqueue_mt" rel="Chapter" href="Unixqueue_mt.html">
<link title="Equeue_intro" rel="Chapter" href="Equeue_intro.html">
<link title="Uq_ssl" rel="Chapter" href="Uq_ssl.html">
<link title="Uq_tcl" rel="Chapter" href="Uq_tcl.html">
<link title="Netcgi_common" rel="Chapter" href="Netcgi_common.html">
<link title="Netcgi" rel="Chapter" href="Netcgi.html">
<link title="Netcgi_ajp" rel="Chapter" href="Netcgi_ajp.html">
<link title="Netcgi_scgi" rel="Chapter" href="Netcgi_scgi.html">
<link title="Netcgi_cgi" rel="Chapter" href="Netcgi_cgi.html">
<link title="Netcgi_fcgi" rel="Chapter" href="Netcgi_fcgi.html">
<link title="Netcgi_dbi" rel="Chapter" href="Netcgi_dbi.html">
<link title="Netcgi1_compat" rel="Chapter" href="Netcgi1_compat.html">
<link title="Netcgi_test" rel="Chapter" href="Netcgi_test.html">
<link title="Netcgi_porting" rel="Chapter" href="Netcgi_porting.html">
<link title="Netcgi_plex" rel="Chapter" href="Netcgi_plex.html">
<link title="Http_client" rel="Chapter" href="Http_client.html">
<link title="Telnet_client" rel="Chapter" href="Telnet_client.html">
<link title="Ftp_data_endpoint" rel="Chapter" href="Ftp_data_endpoint.html">
<link title="Ftp_client" rel="Chapter" href="Ftp_client.html">
<link title="Nethttpd_types" rel="Chapter" href="Nethttpd_types.html">
<link title="Nethttpd_kernel" rel="Chapter" href="Nethttpd_kernel.html">
<link title="Nethttpd_reactor" rel="Chapter" href="Nethttpd_reactor.html">
<link title="Nethttpd_engine" rel="Chapter" href="Nethttpd_engine.html">
<link title="Nethttpd_services" rel="Chapter" href="Nethttpd_services.html">
<link title="Nethttpd_plex" rel="Chapter" href="Nethttpd_plex.html">
<link title="Nethttpd_intro" rel="Chapter" href="Nethttpd_intro.html">
<link title="Netplex_types" rel="Chapter" href="Netplex_types.html">
<link title="Netplex_mp" rel="Chapter" href="Netplex_mp.html">
<link title="Netplex_mt" rel="Chapter" href="Netplex_mt.html">
<link title="Netplex_log" rel="Chapter" href="Netplex_log.html">
<link title="Netplex_controller" rel="Chapter" href="Netplex_controller.html">
<link title="Netplex_container" rel="Chapter" href="Netplex_container.html">
<link title="Netplex_sockserv" rel="Chapter" href="Netplex_sockserv.html">
<link title="Netplex_workload" rel="Chapter" href="Netplex_workload.html">
<link title="Netplex_main" rel="Chapter" href="Netplex_main.html">
<link title="Netplex_config" rel="Chapter" href="Netplex_config.html">
<link title="Netplex_kit" rel="Chapter" href="Netplex_kit.html">
<link title="Rpc_netplex" rel="Chapter" href="Rpc_netplex.html">
<link title="Netplex_cenv" rel="Chapter" href="Netplex_cenv.html">
<link title="Netplex_intro" rel="Chapter" href="Netplex_intro.html">
<link title="Netshm" rel="Chapter" href="Netshm.html">
<link title="Netshm_data" rel="Chapter" href="Netshm_data.html">
<link title="Netshm_hashtbl" rel="Chapter" href="Netshm_hashtbl.html">
<link title="Netshm_array" rel="Chapter" href="Netshm_array.html">
<link title="Netshm_intro" rel="Chapter" href="Netshm_intro.html">
<link title="Netconversion" rel="Chapter" href="Netconversion.html">
<link title="Netchannels" rel="Chapter" href="Netchannels.html">
<link title="Netstream" rel="Chapter" href="Netstream.html">
<link title="Mimestring" rel="Chapter" href="Mimestring.html">
<link title="Netmime" rel="Chapter" href="Netmime.html">
<link title="Netsendmail" rel="Chapter" href="Netsendmail.html">
<link title="Neturl" rel="Chapter" href="Neturl.html">
<link title="Netaddress" rel="Chapter" href="Netaddress.html">
<link title="Netbuffer" rel="Chapter" href="Netbuffer.html">
<link title="Netdate" rel="Chapter" href="Netdate.html">
<link title="Netencoding" rel="Chapter" href="Netencoding.html">
<link title="Netulex" rel="Chapter" href="Netulex.html">
<link title="Netaccel" rel="Chapter" href="Netaccel.html">
<link title="Netaccel_link" rel="Chapter" href="Netaccel_link.html">
<link title="Nethtml" rel="Chapter" href="Nethtml.html">
<link title="Netstring_str" rel="Chapter" href="Netstring_str.html">
<link title="Netstring_pcre" rel="Chapter" href="Netstring_pcre.html">
<link title="Netstring_mt" rel="Chapter" href="Netstring_mt.html">
<link title="Netmappings" rel="Chapter" href="Netmappings.html">
<link title="Netaux" rel="Chapter" href="Netaux.html">
<link title="Nethttp" rel="Chapter" href="Nethttp.html">
<link title="Netchannels_tut" rel="Chapter" href="Netchannels_tut.html">
<link title="Netmime_tut" rel="Chapter" href="Netmime_tut.html">
<link title="Netsendmail_tut" rel="Chapter" href="Netsendmail_tut.html">
<link title="Netulex_tut" rel="Chapter" href="Netulex_tut.html">
<link title="Neturl_tut" rel="Chapter" href="Neturl_tut.html">
<link title="Netsys" rel="Chapter" href="Netsys.html">
<link title="Netpop" rel="Chapter" href="Netpop.html">
<link title="Rpc_auth_dh" rel="Chapter" href="Rpc_auth_dh.html">
<link title="Rpc_key_service" rel="Chapter" href="Rpc_key_service.html">
<link title="Rpc_time" rel="Chapter" href="Rpc_time.html">
<link title="Rpc_auth_local" rel="Chapter" href="Rpc_auth_local.html">
<link title="Rtypes" rel="Chapter" href="Rtypes.html">
<link title="Xdr" rel="Chapter" href="Xdr.html">
<link title="Rpc" rel="Chapter" href="Rpc.html">
<link title="Rpc_program" rel="Chapter" href="Rpc_program.html">
<link title="Rpc_portmapper_aux" rel="Chapter" href="Rpc_portmapper_aux.html">
<link title="Rpc_packer" rel="Chapter" href="Rpc_packer.html">
<link title="Rpc_transport" rel="Chapter" href="Rpc_transport.html">
<link title="Rpc_client" rel="Chapter" href="Rpc_client.html">
<link title="Rpc_simple_client" rel="Chapter" href="Rpc_simple_client.html">
<link title="Rpc_portmapper_clnt" rel="Chapter" href="Rpc_portmapper_clnt.html">
<link title="Rpc_portmapper" rel="Chapter" href="Rpc_portmapper.html">
<link title="Rpc_server" rel="Chapter" href="Rpc_server.html">
<link title="Rpc_auth_sys" rel="Chapter" href="Rpc_auth_sys.html">
<link title="Rpc_intro" rel="Chapter" href="Rpc_intro.html">
<link title="Rpc_mapping_ref" rel="Chapter" href="Rpc_mapping_ref.html">
<link title="Rpc_ssl" rel="Chapter" href="Rpc_ssl.html">
<link title="Rpc_xti_client" rel="Chapter" href="Rpc_xti_client.html">
<link title="Shell_sys" rel="Chapter" href="Shell_sys.html">
<link title="Shell" rel="Chapter" href="Shell.html">
<link title="Shell_uq" rel="Chapter" href="Shell_uq.html">
<link title="Shell_mt" rel="Chapter" href="Shell_mt.html">
<link title="Shell_intro" rel="Chapter" href="Shell_intro.html">
<link title="Netsmtp" rel="Chapter" href="Netsmtp.html"><link title="Arguments -- data sent to the script" rel="Section" href="#3_Argumentsdatasenttothescript">
<link title="Self-referencing URL" rel="Section" href="#3_SelfreferencingURL">
<link title="Outputting" rel="Section" href="#3_Outputting">
<title>Ocamlnet 2 Reference Manual : Netcgi.cgi</title>
</head>
<body>
<div class="navbar"><a href="Netcgi.cgi_environment.html">Previous</a>
&nbsp;<a href="Netcgi.html">Up</a>
&nbsp;<a href="Netcgi.cgi_activation.html">Next</a>
</div>
<center><h1>Class type <a href="type_Netcgi.cgi.html">Netcgi.cgi</a></h1></center>
<br>
<pre><span class="keyword">class type</span> <a name="TYPEcgi"></a>cgi = <code class="code">object</code> <a href="Netcgi.cgi.html">..</a> <code class="code">end</code></pre>Object symbolizing a CGI-like request/response cycle.
<p>

    This is the minimal set of services a connector must provide.
    Additional methods may be defined for specific connectors.<br>
<hr width="100%">
<a name="3_Argumentsdatasenttothescript"></a>
<h3>Arguments -- data sent to the script</h3><pre><span class="keyword">method</span> <a name="METHODargument"></a>argument : <code class="type">string -> <a href="Netcgi.cgi_argument.html">cgi_argument</a></code></pre><div class="info">
<code class="code">#argument name</code> returns the value of the argument named <code class="code">name</code>.
        If the argument appears several times, only one of its
        instances is used.<br>
<b>Raises</b> <code>Not_found</code> if no such argument exists.<br>
</div>
<pre><span class="keyword">method</span> <a name="METHODargument_value"></a>argument_value : <code class="type">?default:string -> string -> string</code></pre><div class="info">
<code class="code">#argument_value</code> returns the value of the argument as a
        string.  If the argument does not exist, the <code class="code">default</code> is
        returned.<br>
</div>
<div class="param_info"><code class="code">default</code> : defaults to <code class="code">""</code>.</div>
<pre><span class="keyword">method</span> <a name="METHODargument_exists"></a>argument_exists : <code class="type">string -> bool</code></pre><div class="info">
<code class="code">#argument_exists</code> returns <code class="code">false</code> if the named parameter is
        missing and <code class="code">true</code> otherwise.<br>
</div>
<pre><span class="keyword">method</span> <a name="METHODmultiple_argument"></a>multiple_argument : <code class="type">string -> <a href="Netcgi.cgi_argument.html">cgi_argument</a> list</code></pre><div class="info">
<code class="code">#multiple_argument name</code> returns all the values of the
	argument named <code class="code">name</code>.<br>
</div>
<pre><span class="keyword">method</span> <a name="METHODarguments"></a>arguments : <code class="type"><a href="Netcgi.cgi_argument.html">cgi_argument</a> list</code></pre><div class="info">
The complete list of arguments.<br>
</div>
<pre><span class="keyword">method</span> <a name="METHODenvironment"></a>environment : <code class="type"><a href="Netcgi.cgi_environment.html">cgi_environment</a></code></pre><div class="info">
The environment object.  This object is the "outer layer" of the
        activation object that connects it with real I/O channels.<br>
</div>
<pre><span class="keyword">method</span> <a name="METHODrequest_method"></a>request_method : <code class="type">[ `DELETE | `GET | `HEAD | `POST | `PUT of <a href="Netcgi.cgi_argument.html">cgi_argument</a> ]</code></pre><div class="info">
The HTTP method used to make the request.<br>
</div>
<pre><span class="keyword">method</span> <a name="METHODfinalize"></a>finalize : <code class="type">unit -> unit</code></pre><div class="info">
This method calls <code class="code">#finalize</code> for every CGI argument
        (including the possible one of PUT) to ensure that all files
        are deleted.  It also executes all functions registered with
        <code class="code">#at_exit</code>.  It does not close the in/out channels, however.
        This method is not registered in the garbage collector, and it
        is a bad idea to do so.  However, all connectors offered in
        Netcgi automatically call <code class="code">#finalize</code> at the end of the
        request cycle (even when its terminated by an uncaught exception
        when <code class="code">#config.default_exn_handler</code> is true) so you do not have
        to worry much about calling it yourself.<br>
</div>
<a name="3_SelfreferencingURL"></a>
<h3>Self-referencing URL</h3><pre><span class="keyword">method</span> <a name="METHODurl"></a>url : <code class="type">?protocol:<a href="Nethttp.html#TYPEprotocol">Nethttp.protocol</a> -><br>       ?with_authority:<a href="Netcgi.html#TYPEother_url_spec">other_url_spec</a> -><br>       ?with_script_name:<a href="Netcgi.html#TYPEother_url_spec">other_url_spec</a> -><br>       ?with_path_info:<a href="Netcgi.html#TYPEother_url_spec">other_url_spec</a> -><br>       ?with_query_string:<a href="Netcgi.html#TYPEquery_string_spec">query_string_spec</a> -> unit -> string</code></pre><div class="info">
Returns the URL of the current CGI-like script.  (Note that it
	may differ from the actual URL that requested the script if,
	for example, rewriting rules were specified in the web server
	configuration.)<br>
</div>
<div class="param_info"><code class="code">protocol</code> : The URL scheme.  By default, the URL scheme is
        used that is described in the environment</div>
<div class="param_info"><code class="code">with_authority</code> : Whether to include authority part
        (e.g. http or https) of the URL, and if yes, from which
        source.  Default: <code class="code">`Env</code>.</div>
<div class="param_info"><code class="code">with_script_name</code> : Whether to include the part of the URL
        path identifying the CGI script, and if yes, from which
        source.  Default: <code class="code">`Env</code>.</div>
<div class="param_info"><code class="code">with_path_info</code> : Whether to include the rest of the URL
        path exceeding the script name, and if yes, from which source.
        Default: <code class="code">`Env</code>.</div>
<div class="param_info"><code class="code">with_query_string</code> : Whether to include a query string,
        and if yes, which one.  Only arguments with <code class="code">#store</code> being
        <code class="code">`Memory</code> will be added.  Default: <code class="code">`None</code>, i.e. no query
        string.</div>
<a name="3_Outputting"></a>
<h3>Outputting</h3><pre><span class="keyword">method</span> <a name="METHODset_header"></a>set_header : <code class="type">?status:<a href="Nethttp.html#TYPEhttp_status">Nethttp.http_status</a> -><br>       ?content_type:string -><br>       ?content_length:int -><br>       ?set_cookie:<a href="Nethttp.html#TYPEcookie">Nethttp.cookie</a> list -><br>       ?set_cookies:<a href="Netcgi.Cookie.html#TYPEt">Cookie.t</a> list -><br>       ?cache:<a href="Netcgi.html#TYPEcache_control">cache_control</a> -><br>       ?filename:string -><br>       ?language:string -><br>       ?script_type:string -><br>       ?style_type:string -> ?fields:(string * string list) list -> unit -> unit</code></pre><div class="info">
Sets the header (removing any previous one).  When the output
        channel supports transactions, it is possible to set the
        header (possibly several times) until the <code class="code">#out_channel</code> is
        commited for the first time or <code class="code">#env#send_output_header()</code> is
        called.  When there is no support for transactions, the header
        must be set before the first byte of output is written.
<p>

        If <code class="code">#set_header</code> is called a second time, it will overwrite
        <i>all</i> the header fields.<br>
</div>
<div class="param_info"><code class="code">status</code> : Sets the HTTP status of the reply according to
	<a href="http://www.w3.org/Protocols/rfc2616">RFC 2616</a>.  Defaults to
	"no status", but the server normally complements an <code class="code">`Ok</code>
	status in this case.</div>
<div class="param_info"><code class="code">content_type</code> : Sets the content type.
	Defaults to <code class="code">"text/html"</code>.</div>
<div class="param_info"><code class="code">content_length</code> : Sets the content length (in bytes).
	Default: No such field.</div>
<div class="param_info"><code class="code">set_cookie</code> : Deprecated, use <code class="code">set_cookies</code>.</div>
<div class="param_info"><code class="code">set_cookies</code> : Sets a number of cookies.  Default: <code class="code">[]</code>.
	Remember that the browser may not support more than 20 cookies
	per web server.  You can query the cookies using <code class="code">env#cookies</code>
	and <code class="code">env#cookie</code>.  If you set cookies, you want to think about
	an appropriate <code class="code">cache</code> setting.  You may also want to add a
	<a href="http://www.w3.org/P3P/">P3P</a> header (Platform for Privacy
	Preferences) -- otherwise your cookies may be discarded by
	some browsers.</div>
<div class="param_info"><code class="code">cache</code> : Sets the cache behavior for replies to GET
        requests.  The default is <code class="code">`Unspecified</code>.  <b>It is strongly
        recommended to specify the caching behaviour!!!</b> You are on
        the safe side with <code class="code">`No_cache</code>, forcing every page to be
        regenerated. If your data do not change frequently, <code class="code">`Max_age
        n</code> tells the caches to store the data at most <code class="code">n</code> seconds.</div>
<div class="param_info"><code class="code">filename</code> : Sets the filename associated with the page.
        This filename is taken for the "save as..."  dialog.  Default:
        <code class="code">""</code>, i.e. no filename.  Note: It is bad practice if the
        filename contains problematic characters (backslash, double
        quote, space), or the names of directories.  It is recommended
        that you set <code class="code">content_type</code> to "application/octet-stream" for
        this feture to work with most browsers and, if possible, to
        set <code class="code">content_length</code> because that usually improves the
        download dialog.)</div>
<div class="param_info"><code class="code">script_type</code> : Sets the language of the script tag (for
        HTML replies).  It is recommended to use this field if there
        are <code class="code">ONXXX</code> attributes containing scripts before the first
        <code class="code">&lt;SCRIPT&gt;</code> element, because you cannot specify the script
        language for the <code class="code">ONXXX</code> attributes otherwise.  <code class="code">script_type</code>
        must be a media type, e.g. "text/javascript".  Default: no
        language is specified.</div>
<div class="param_info"><code class="code">style_type</code> : Sets the language of the style tag (for
        HTML replies).  It is recommended to use this field if there
        are <code class="code">STYLE</code> attributes containing scripts before the first
        <code class="code">&lt;STYLE&gt;</code> element, because you cannot specify the style
        language for the <code class="code">STYLE</code> attributes otherwise.  <code class="code">style_type</code>
        must be a media type, e.g. "text/css".  Default: no language
        is specified.</div>
<div class="param_info"><code class="code">fields</code> : Sets additional fields of the header.  Default: <code class="code">[]</code>.</div>
<pre><span class="keyword">method</span> <a name="METHODset_redirection_header"></a>set_redirection_header : <code class="type">?set_cookies:<a href="Netcgi.Cookie.html#TYPEt">Cookie.t</a> list -><br>       ?fields:(string * string list) list -> string -> unit</code></pre><div class="info">
Sets the header such that a redirection to the specified URL
        is performed.  If the URL begins with "http:" the redirection
        directive is passed back to the client, and the client will
        repeat the request for the new location (with a GET method).
        If the URL begins with "/", the server performs the
        redirection, and it is invisible for the client.<br>
</div>
<pre><span class="keyword">method</span> <a name="METHODoutput"></a>output : <code class="type"><a href="Netchannels.trans_out_obj_channel.html">Netchannels.trans_out_obj_channel</a></code></pre><div class="info">
<span class="warning">Deprecated.</span>Use <code class="code">#out_channel</code> instead.<br>
</div>
<pre><span class="keyword">method</span> <a name="METHODout_channel"></a>out_channel : <code class="type"><a href="Netchannels.trans_out_obj_channel.html">Netchannels.trans_out_obj_channel</a></code></pre><div class="info">
The output channel to which the generated content is intended
        to be written.  The header is not stored in this channel, so
        <code class="code">#pos_out</code> returns the size of the DATA in bytes (useful to
        set Content-Length).  Note that HEAD requests must not send
        back a message body so, in this case, all data sent to this
        channel is discarded.  This allows your scripts to work
        unmodified for GET, POST and HEAD requests.
<p>

        The output channel may have transactional semantics, and
        because of this, it is an <code class="code">trans_out_obj_channel</code>.
        Implementations are free to support transactions or not.
<p>

        After all data have been written, the method <code class="code">#commit_work()</code>
        <b>must</b> be called, even if there is no support for
        transactions.
<p>

        Simple Example:
        <pre><code class="code">        cgi # out_channel # output_string "Hello world!\n";
        cgi # out_channel # commit_work()
        </code></pre>
<p>

        Example for an error handler and a transaction buffer: If an
        error happens, it is possible to roll the channel back, and to
        write the error message.
        <pre><code class="code">        try
          cgi # set_header ... ();
          cgi # out_channel # output_string "Hello World!"; ...
          cgi # out_channel # commit_work();
        with err -&gt;
          cgi # out_channel # rollback_work();
          cgi # set_header ... ();
          cgi # out_channel # output_string "Software error!"; ...
          cgi # out_channel # commit_work();
        </code></pre><br>
</div>
<pre><span class="keyword">method</span> <a name="METHODat_exit"></a>at_exit : <code class="type">(unit -> unit) -> unit</code></pre><div class="info">
<code class="code">#at_exit f</code> registers the function <code class="code">f</code> to be executed when
	<code class="code">#finalize</code> is called (which is done automatically when the
	request finishes).  The functions are executed in the reverse
	order in which they were registered.<br>
</div>
</body></html>