Changes

Jump to navigation Jump to search
1,097 bytes added ,  16:30, 27 February 2020
no edit summary
All functions in this module are assigned to the <code><nowiki>http://expath.org/ns/http-client</nowiki></code> namespace, which is statically bound to the {{Code|http}} prefix.<br/>
All errors are assigned to the <code><nowiki>http://expath.org/ns/error</nowiki></code> namespace, which is statically bound to the {{Code|exerrexperr}} prefix.
=Functions=
* If the URI is not given with the parameter {{Code|$href}}, its value in {{Code|$request}} is used instead.
* The request body can also be supplied via the {{Code|$bodies}} parameter.
* Certificate verification can be globally disabled via the {{Option|IGNORECERT}} option.
Notes:
'''Query:'''
<pre classsyntaxhighlight lang="brush:xquery">http:send-request(<http:request method='get' status-only='true'/>, 'http://basex.org')</presyntaxhighlight>
'''Result:'''
<pre classsyntaxhighlight lang="brush:xml"><http:response status="200" message="OK">
<http:header name="Date" value="Mon, 14 Mar 2011 20:55:53 GMT"/>
<http:header name="Content-Length" value="12671"/>
<http:header name="Cache-Control" value="max-age=90"/>
<http:body media-type="text/html; charset=utf-8"/>
</http:response></presyntaxhighlight>
==Google Homepage==
'''Query:'''
<pre classsyntaxhighlight lang="brush:xquery">http:send-request(<http:request method='get' href='http://www.google.com' timeout='10'/>)</presyntaxhighlight>
'''Result:'''
<pre classsyntaxhighlight lang="brush:xml">
<http:response status="200" message="OK">
<http:header name="Date" value="Mon, 14 Mar 2011 22:03:25 GMT"/>
</body>
</html>
</presyntaxhighlight>
The response content type can also be overwritten in order to retrieve HTML pages and other textual data as plain string (using {{Code|text/plain}}) or in its binary representation (using {{Code|application/octet-stream}}). With the {{Code|http:header}} element, a custom user agent can be set. See the following example:
'''Query:'''
<pre classsyntaxhighlight lang="brush:xquery">
let $binary := http:send-request(
<http:request method='get'
'Conversion to XML failed: ' || $err:description
}
</presyntaxhighlight>
===SVG Data===
'''Query:'''
<pre classsyntaxhighlight lang="brush:xquery">http:send-request(<http:request method='get'/>, 'http://upload.wikimedia.org/wikipedia/commons/6/6b/Bitmap_VS_SVG.svg')</presyntaxhighlight>
'''Result:'''
<pre classsyntaxhighlight lang="brush:xml"><http:response status="200" message="OK">
<http:header name="ETag" value="W/&quot;11b6d-4ba15ed4&quot;"/>
<http:header name="Age" value="9260"/>
</linearGradient>
...
</svg></presyntaxhighlight>
==POST Request==
'''Query:'''
<pre classsyntaxhighlight lang="brush:xquery">let $http:send-request :=( <http:request href='http://localhost:8984/rest' method='post' username='admin' password='admin' send-authorization='true'> <http:body media-type='application/xml'/> <query xmlns="/http:request>, 'http://basex.orglocalhost:8984/rest"', <query> <text><![CDATA[ <html>{ for $i in 1 to 3 return <div>Section {$i }</div> }</html> ]]> </text> </query> </http:body> </http:request>return http:send-request($request)</presyntaxhighlight>
'''Result:'''
<pre classsyntaxhighlight lang="brush:xml">
<http:response xmlns:http="http://expath.org/ns/http-client" status="200" message="OK">
<http:header name="Content-Length" value="135"/>
<div>Section 3</div>
</html>
</presyntaxhighlight> ==File Upload== Performs an HTML file upload. In the RESTXQ code, the uploaded file is written to the temporary directory: '''Query:''' <syntaxhighlight lang="xquery">let $path := 'file-to-be.uploaded'return http:send-request( <http:request method='POST'> <http:multipart media-type='multipart/form-data'> <http:header name='content-disposition' value='form-data; name="files"; filename="{ file:name($path) }"'/> <http:body media-type='application/octet-stream'/> </http:multipart> </http:request>, 'http://localhost:8984/write-to-temp', file:read-binary($path))</syntaxhighlight> '''RESTXQ service:''' <syntaxhighlight lang="xquery">declare %rest:POST %rest:path('/write-to-temp') %rest:form-param('files', '{$files}')function dba:file-upload( $files as map(xs:string, xs:base64Binary)) as empty-sequence() { map:for-each($files, function($file, $content) { file:write-binary(file:temp-dir() || $file, $content) });};</syntaxhighlight>
=Errors=
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu