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