xref: /aosp_15_r20/external/libxml2/doc/devhelp/libxml2-nanohttp.html (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>nanohttp: minimal HTTP implementation</title>
5<meta name="generator" content="Libxml2 devhelp stylesheet">
6<link rel="start" href="index.html" title="libxml2 Reference Manual">
7<link rel="up" href="general.html" title="API">
8<link rel="stylesheet" href="style.css" type="text/css">
9<link rel="chapter" href="general.html" title="API">
10</head>
11<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
12<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
13<td><a accesskey="p" href="libxml2-nanoftp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
14<td><a accesskey="u" href="general.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
15<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
16<td><a accesskey="n" href="libxml2-parser.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
17<th width="100%" align="center">libxml2 Reference Manual</th>
18</tr></table>
19<h2><span class="refentrytitle">nanohttp</span></h2>
20<p>nanohttp - minimal HTTP implementation</p>
21<p>minimal HTTP implementation allowing to fetch resources like external subset. </p>
22<p>Author(s): Daniel Veillard </p>
23<div class="refsynopsisdiv">
24<h2>Synopsis</h2>
25<pre class="synopsis">const char *	<a href="#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a>	(void * ctx);
26void	<a href="#xmlNanoHTTPCleanup">xmlNanoHTTPCleanup</a>		(void);
27void	<a href="#xmlNanoHTTPClose">xmlNanoHTTPClose</a>		(void * ctx);
28int	<a href="#xmlNanoHTTPContentLength">xmlNanoHTTPContentLength</a>	(void * ctx);
29const char *	<a href="#xmlNanoHTTPEncoding">xmlNanoHTTPEncoding</a>	(void * ctx);
30int	<a href="#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a>		(const char * URL, <br>					 const char * filename, <br>					 char ** contentType);
31void	<a href="#xmlNanoHTTPInit">xmlNanoHTTPInit</a>			(void);
32void *	<a href="#xmlNanoHTTPMethod">xmlNanoHTTPMethod</a>		(const char * URL, <br>					 const char * method, <br>					 const char * input, <br>					 char ** contentType, <br>					 const char * headers, <br>					 int ilen);
33void *	<a href="#xmlNanoHTTPMethodRedir">xmlNanoHTTPMethodRedir</a>		(const char * URL, <br>					 const char * method, <br>					 const char * input, <br>					 char ** contentType, <br>					 char ** redir, <br>					 const char * headers, <br>					 int ilen);
34const char *	<a href="#xmlNanoHTTPMimeType">xmlNanoHTTPMimeType</a>	(void * ctx);
35void *	<a href="#xmlNanoHTTPOpen">xmlNanoHTTPOpen</a>			(const char * URL, <br>					 char ** contentType);
36void *	<a href="#xmlNanoHTTPOpenRedir">xmlNanoHTTPOpenRedir</a>		(const char * URL, <br>					 char ** contentType, <br>					 char ** redir);
37int	<a href="#xmlNanoHTTPRead">xmlNanoHTTPRead</a>			(void * ctx, <br>					 void * dest, <br>					 int len);
38const char *	<a href="#xmlNanoHTTPRedir">xmlNanoHTTPRedir</a>	(void * ctx);
39int	<a href="#xmlNanoHTTPReturnCode">xmlNanoHTTPReturnCode</a>		(void * ctx);
40int	<a href="#xmlNanoHTTPSave">xmlNanoHTTPSave</a>			(void * ctxt, <br>					 const char * filename);
41void	<a href="#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a>		(const char * URL);
42</pre>
43</div>
44<div class="refsect1" lang="en"><h2>Description</h2></div>
45<div class="refsect1" lang="en">
46<h2>Details</h2>
47<div class="refsect2" lang="en">
48<div class="refsect2" lang="en">
49<h3>
50<a name="xmlNanoHTTPAuthHeader"></a>xmlNanoHTTPAuthHeader ()</h3>
51<pre class="programlisting">const char *	xmlNanoHTTPAuthHeader	(void * ctx)<br>
52</pre>
53<p>Get the authentication header of an HTTP context</p>
54<div class="variablelist"><table border="0">
55<col align="left">
56<tbody>
57<tr>
58<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
59<td>the HTTP context</td>
60</tr>
61<tr>
62<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
63<td>the stashed value of the WWW-Authenticate or Proxy-Authenticate header.</td>
64</tr>
65</tbody>
66</table></div>
67</div>
68<hr>
69<div class="refsect2" lang="en">
70<h3>
71<a name="xmlNanoHTTPCleanup"></a>xmlNanoHTTPCleanup ()</h3>
72<pre class="programlisting">void	xmlNanoHTTPCleanup		(void)<br>
73</pre>
74<p>Cleanup the HTTP protocol layer.</p>
75</div>
76<hr>
77<div class="refsect2" lang="en">
78<h3>
79<a name="xmlNanoHTTPClose"></a>xmlNanoHTTPClose ()</h3>
80<pre class="programlisting">void	xmlNanoHTTPClose		(void * ctx)<br>
81</pre>
82<p>This function closes an HTTP context, it ends up the connection and free all data related to it.</p>
83<div class="variablelist"><table border="0">
84<col align="left">
85<tbody><tr>
86<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
87<td>the HTTP context</td>
88</tr></tbody>
89</table></div>
90</div>
91<hr>
92<div class="refsect2" lang="en">
93<h3>
94<a name="xmlNanoHTTPContentLength"></a>xmlNanoHTTPContentLength ()</h3>
95<pre class="programlisting">int	xmlNanoHTTPContentLength	(void * ctx)<br>
96</pre>
97<p>Provides the specified content length from the HTTP header.</p>
98<div class="variablelist"><table border="0">
99<col align="left">
100<tbody>
101<tr>
102<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
103<td>the HTTP context</td>
104</tr>
105<tr>
106<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
107<td>the specified content length from the HTTP header. Note that a value of -1 indicates that the content length element was not included in the response header.</td>
108</tr>
109</tbody>
110</table></div>
111</div>
112<hr>
113<div class="refsect2" lang="en">
114<h3>
115<a name="xmlNanoHTTPEncoding"></a>xmlNanoHTTPEncoding ()</h3>
116<pre class="programlisting">const char *	xmlNanoHTTPEncoding	(void * ctx)<br>
117</pre>
118<p>Provides the specified encoding if specified in the HTTP headers.</p>
119<div class="variablelist"><table border="0">
120<col align="left">
121<tbody>
122<tr>
123<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
124<td>the HTTP context</td>
125</tr>
126<tr>
127<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
128<td>the specified encoding or NULL if not available</td>
129</tr>
130</tbody>
131</table></div>
132</div>
133<hr>
134<div class="refsect2" lang="en">
135<h3>
136<a name="xmlNanoHTTPFetch"></a>xmlNanoHTTPFetch ()</h3>
137<pre class="programlisting">int	xmlNanoHTTPFetch		(const char * URL, <br>					 const char * filename, <br>					 char ** contentType)<br>
138</pre>
139<p>This function try to fetch the indicated resource via HTTP GET and save it's content in the file.</p>
140<div class="variablelist"><table border="0">
141<col align="left">
142<tbody>
143<tr>
144<td><span class="term"><i><tt>URL</tt></i>:</span></td>
145<td>The URL to load</td>
146</tr>
147<tr>
148<td><span class="term"><i><tt>filename</tt></i>:</span></td>
149<td>the filename where the content should be saved</td>
150</tr>
151<tr>
152<td><span class="term"><i><tt>contentType</tt></i>:</span></td>
153<td>if available the Content-Type information will be returned at that location</td>
154</tr>
155<tr>
156<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
157<td>-1 in case of failure, 0 in case of success. The contentType, if provided must be freed by the caller</td>
158</tr>
159</tbody>
160</table></div>
161</div>
162<hr>
163<div class="refsect2" lang="en">
164<h3>
165<a name="xmlNanoHTTPInit"></a>xmlNanoHTTPInit ()</h3>
166<pre class="programlisting">void	xmlNanoHTTPInit			(void)<br>
167</pre>
168<p>Initialize the HTTP protocol layer. Currently it just checks for proxy information</p>
169</div>
170<hr>
171<div class="refsect2" lang="en">
172<h3>
173<a name="xmlNanoHTTPMethod"></a>xmlNanoHTTPMethod ()</h3>
174<pre class="programlisting">void *	xmlNanoHTTPMethod		(const char * URL, <br>					 const char * method, <br>					 const char * input, <br>					 char ** contentType, <br>					 const char * headers, <br>					 int ilen)<br>
175</pre>
176<p>This function try to open a connection to the indicated resource via HTTP using the given @method, adding the given extra headers and the input buffer for the request content.</p>
177<div class="variablelist"><table border="0">
178<col align="left">
179<tbody>
180<tr>
181<td><span class="term"><i><tt>URL</tt></i>:</span></td>
182<td>The URL to load</td>
183</tr>
184<tr>
185<td><span class="term"><i><tt>method</tt></i>:</span></td>
186<td>the HTTP method to use</td>
187</tr>
188<tr>
189<td><span class="term"><i><tt>input</tt></i>:</span></td>
190<td>the input string if any</td>
191</tr>
192<tr>
193<td><span class="term"><i><tt>contentType</tt></i>:</span></td>
194<td>the Content-Type information IN and OUT</td>
195</tr>
196<tr>
197<td><span class="term"><i><tt>headers</tt></i>:</span></td>
198<td>the extra headers</td>
199</tr>
200<tr>
201<td><span class="term"><i><tt>ilen</tt></i>:</span></td>
202<td>input length</td>
203</tr>
204<tr>
205<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
206<td>NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller</td>
207</tr>
208</tbody>
209</table></div>
210</div>
211<hr>
212<div class="refsect2" lang="en">
213<h3>
214<a name="xmlNanoHTTPMethodRedir"></a>xmlNanoHTTPMethodRedir ()</h3>
215<pre class="programlisting">void *	xmlNanoHTTPMethodRedir		(const char * URL, <br>					 const char * method, <br>					 const char * input, <br>					 char ** contentType, <br>					 char ** redir, <br>					 const char * headers, <br>					 int ilen)<br>
216</pre>
217<p>This function try to open a connection to the indicated resource via HTTP using the given @method, adding the given extra headers and the input buffer for the request content.</p>
218<div class="variablelist"><table border="0">
219<col align="left">
220<tbody>
221<tr>
222<td><span class="term"><i><tt>URL</tt></i>:</span></td>
223<td>The URL to load</td>
224</tr>
225<tr>
226<td><span class="term"><i><tt>method</tt></i>:</span></td>
227<td>the HTTP method to use</td>
228</tr>
229<tr>
230<td><span class="term"><i><tt>input</tt></i>:</span></td>
231<td>the input string if any</td>
232</tr>
233<tr>
234<td><span class="term"><i><tt>contentType</tt></i>:</span></td>
235<td>the Content-Type information IN and OUT</td>
236</tr>
237<tr>
238<td><span class="term"><i><tt>redir</tt></i>:</span></td>
239<td>the redirected URL OUT</td>
240</tr>
241<tr>
242<td><span class="term"><i><tt>headers</tt></i>:</span></td>
243<td>the extra headers</td>
244</tr>
245<tr>
246<td><span class="term"><i><tt>ilen</tt></i>:</span></td>
247<td>input length</td>
248</tr>
249<tr>
250<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
251<td>NULL in case of failure, otherwise a request handler. The contentType, or redir, if provided must be freed by the caller</td>
252</tr>
253</tbody>
254</table></div>
255</div>
256<hr>
257<div class="refsect2" lang="en">
258<h3>
259<a name="xmlNanoHTTPMimeType"></a>xmlNanoHTTPMimeType ()</h3>
260<pre class="programlisting">const char *	xmlNanoHTTPMimeType	(void * ctx)<br>
261</pre>
262<p>Provides the specified Mime-Type if specified in the HTTP headers.</p>
263<div class="variablelist"><table border="0">
264<col align="left">
265<tbody>
266<tr>
267<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
268<td>the HTTP context</td>
269</tr>
270<tr>
271<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
272<td>the specified Mime-Type or NULL if not available</td>
273</tr>
274</tbody>
275</table></div>
276</div>
277<hr>
278<div class="refsect2" lang="en">
279<h3>
280<a name="xmlNanoHTTPOpen"></a>xmlNanoHTTPOpen ()</h3>
281<pre class="programlisting">void *	xmlNanoHTTPOpen			(const char * URL, <br>					 char ** contentType)<br>
282</pre>
283<p>This function try to open a connection to the indicated resource via HTTP GET.</p>
284<div class="variablelist"><table border="0">
285<col align="left">
286<tbody>
287<tr>
288<td><span class="term"><i><tt>URL</tt></i>:</span></td>
289<td>The URL to load</td>
290</tr>
291<tr>
292<td><span class="term"><i><tt>contentType</tt></i>:</span></td>
293<td>if available the Content-Type information will be returned at that location</td>
294</tr>
295<tr>
296<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
297<td>NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller</td>
298</tr>
299</tbody>
300</table></div>
301</div>
302<hr>
303<div class="refsect2" lang="en">
304<h3>
305<a name="xmlNanoHTTPOpenRedir"></a>xmlNanoHTTPOpenRedir ()</h3>
306<pre class="programlisting">void *	xmlNanoHTTPOpenRedir		(const char * URL, <br>					 char ** contentType, <br>					 char ** redir)<br>
307</pre>
308<p>This function try to open a connection to the indicated resource via HTTP GET.</p>
309<div class="variablelist"><table border="0">
310<col align="left">
311<tbody>
312<tr>
313<td><span class="term"><i><tt>URL</tt></i>:</span></td>
314<td>The URL to load</td>
315</tr>
316<tr>
317<td><span class="term"><i><tt>contentType</tt></i>:</span></td>
318<td>if available the Content-Type information will be returned at that location</td>
319</tr>
320<tr>
321<td><span class="term"><i><tt>redir</tt></i>:</span></td>
322<td>if available the redirected URL will be returned</td>
323</tr>
324<tr>
325<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
326<td>NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller</td>
327</tr>
328</tbody>
329</table></div>
330</div>
331<hr>
332<div class="refsect2" lang="en">
333<h3>
334<a name="xmlNanoHTTPRead"></a>xmlNanoHTTPRead ()</h3>
335<pre class="programlisting">int	xmlNanoHTTPRead			(void * ctx, <br>					 void * dest, <br>					 int len)<br>
336</pre>
337<p>This function tries to read @len bytes from the existing HTTP connection and saves them in @dest. This is a blocking call.</p>
338<div class="variablelist"><table border="0">
339<col align="left">
340<tbody>
341<tr>
342<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
343<td>the HTTP context</td>
344</tr>
345<tr>
346<td><span class="term"><i><tt>dest</tt></i>:</span></td>
347<td>a buffer</td>
348</tr>
349<tr>
350<td><span class="term"><i><tt>len</tt></i>:</span></td>
351<td>the buffer length</td>
352</tr>
353<tr>
354<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
355<td>the number of byte read. 0 is an indication of an end of connection. -1 indicates a parameter error.</td>
356</tr>
357</tbody>
358</table></div>
359</div>
360<hr>
361<div class="refsect2" lang="en">
362<h3>
363<a name="xmlNanoHTTPRedir"></a>xmlNanoHTTPRedir ()</h3>
364<pre class="programlisting">const char *	xmlNanoHTTPRedir	(void * ctx)<br>
365</pre>
366<p>Provides the specified redirection URL if available from the HTTP header.</p>
367<div class="variablelist"><table border="0">
368<col align="left">
369<tbody>
370<tr>
371<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
372<td>the HTTP context</td>
373</tr>
374<tr>
375<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
376<td>the specified redirection URL or NULL if not redirected.</td>
377</tr>
378</tbody>
379</table></div>
380</div>
381<hr>
382<div class="refsect2" lang="en">
383<h3>
384<a name="xmlNanoHTTPReturnCode"></a>xmlNanoHTTPReturnCode ()</h3>
385<pre class="programlisting">int	xmlNanoHTTPReturnCode		(void * ctx)<br>
386</pre>
387<p>Get the latest HTTP return code received</p>
388<div class="variablelist"><table border="0">
389<col align="left">
390<tbody>
391<tr>
392<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
393<td>the HTTP context</td>
394</tr>
395<tr>
396<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
397<td>the HTTP return code for the request.</td>
398</tr>
399</tbody>
400</table></div>
401</div>
402<hr>
403<div class="refsect2" lang="en">
404<h3>
405<a name="xmlNanoHTTPSave"></a>xmlNanoHTTPSave ()</h3>
406<pre class="programlisting">int	xmlNanoHTTPSave			(void * ctxt, <br>					 const char * filename)<br>
407</pre>
408<p>This function saves the output of the HTTP transaction to a file It closes and free the context at the end</p>
409<div class="variablelist"><table border="0">
410<col align="left">
411<tbody>
412<tr>
413<td><span class="term"><i><tt>ctxt</tt></i>:</span></td>
414<td>the HTTP context</td>
415</tr>
416<tr>
417<td><span class="term"><i><tt>filename</tt></i>:</span></td>
418<td>the filename where the content should be saved</td>
419</tr>
420<tr>
421<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
422<td>-1 in case of failure, 0 in case of success.</td>
423</tr>
424</tbody>
425</table></div>
426</div>
427<hr>
428<div class="refsect2" lang="en">
429<h3>
430<a name="xmlNanoHTTPScanProxy"></a>xmlNanoHTTPScanProxy ()</h3>
431<pre class="programlisting">void	xmlNanoHTTPScanProxy		(const char * URL)<br>
432</pre>
433<p>(Re)Initialize the HTTP Proxy context by parsing the URL and finding the protocol host port it indicates. Should be like http://myproxy/ or http://myproxy:3128/ A NULL URL cleans up proxy information.</p>
434<div class="variablelist"><table border="0">
435<col align="left">
436<tbody><tr>
437<td><span class="term"><i><tt>URL</tt></i>:</span></td>
438<td>The proxy URL used to initialize the proxy context</td>
439</tr></tbody>
440</table></div>
441</div>
442<hr>
443</div>
444</div>
445</body>
446</html>
447