67 lines
No EOL
2.5 KiB
Text
67 lines
No EOL
2.5 KiB
Text
(:~ post utils :)
|
|
module namespace qform = 'urn:quodatum:http.form';
|
|
|
|
(:~ post form data in $fields to $url RR style
|
|
@param $url http server target
|
|
@param $fields map if key starts @ value is file path to upload
|
|
:)
|
|
declare function qform:post-form($fields as map(*), $url as xs:string)
|
|
as item(){
|
|
let $names:= map:keys($fields)
|
|
|
|
let $req:=<http:request method='POST'>
|
|
<http:multipart media-type='multipart/form-data'>{
|
|
for $name in $names
|
|
return (
|
|
if(starts-with($name,"@"))
|
|
then let $file:=$fields($name)
|
|
return <http:header name='content-disposition'
|
|
value='form-data; name="{substring($name,2)}"; filename="{file:name($file)}"'/>
|
|
else <http:header name='content-disposition'
|
|
value='form-data; name="{$name}";'/>,
|
|
<http:body media-type='application/octet-stream'/>
|
|
)
|
|
}</http:multipart>
|
|
</http:request>
|
|
let $result:= http:send-request($req=>trace("REQ"), $url,
|
|
for $name in $names
|
|
return if(starts-with($name,"@"))
|
|
then unparsed-text($fields($name))=>trace("EE")
|
|
else $fields($name)
|
|
)
|
|
return if($result[1]/@status eq "200")
|
|
then $result[2]
|
|
else error(xs:QName("qform:post-form"),$result[1]/@message)
|
|
};
|
|
|
|
(:~ post json data in $fields to $url OLLAMA style
|
|
:)
|
|
declare function qform:post-json($fields as map(*), $url as xs:string)
|
|
as item(){
|
|
|
|
let $req:=<http:request method='POST' override-media-type='text/plain'>
|
|
<http:body media-type='application/json'/>
|
|
</http:request>
|
|
let $body:= serialize($fields,map{"method":"json"})
|
|
let $result:= http:send-request($req, $url, $body)
|
|
return if($result[1]/@status eq "200")
|
|
then $result[2]
|
|
else error(xs:QName("qform:post-json"),$result[1]/@message)
|
|
};
|
|
(:~ post json data in $fields to $url mermaid style
|
|
:)
|
|
declare function qform:post-text($text as xs:string, $url as xs:string)
|
|
as item(){
|
|
let $req:=<http:request method='POST'>
|
|
<http:body media-type='text/plain'/>
|
|
</http:request>
|
|
return http:send-request($req, $url, $text)
|
|
=>qform:check("qform:post-text")
|
|
};
|
|
|
|
declare function qform:check($result as item()+, $code as xs:string)
|
|
as item(){
|
|
if($result[1]/@status eq "200")
|
|
then $result[2]
|
|
else error(xs:QName($code),$result[1]/@message)
|
|
}; |