Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel D.Zimmel@ESVmedien.de Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX basex-talk@mailman.uni-konstanz.de Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M.
[1] https://docs.basex.org/wiki/Request_Module
On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel D.Zimmel@ESVmedien.de Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX basex-talk@mailman.uni-konstanz.de Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
Thanks for the hint Marco,
I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here. I can access the full (unparsed) body, though (I can use that).
Daniel
-----Ursprüngliche Nachricht----- Von: Marco Lettere m.lettere@gmail.com Gesendet: Mittwoch, 22. April 2020 14:24 An: basex-talk@mailman.uni-konstanz.de Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param()
Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M.
[1] https://docs.basex.org/wiki/Request_Module
On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel D.Zimmel@ESVmedien.de Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX basex-talk@mailman.uni-konstanz.de Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
Are you setting the mime type to "application/x-www-form-urlencoded"? This is the prerequisite in order to get the body of a post parsed to form parameters. M.
On 22/04/20 15:22, Zimmel, Daniel wrote:
Thanks for the hint Marco,
I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here. I can access the full (unparsed) body, though (I can use that).
Daniel
-----Ursprüngliche Nachricht----- Von: Marco Lettere m.lettere@gmail.com Gesendet: Mittwoch, 22. April 2020 14:24 An: basex-talk@mailman.uni-konstanz.de Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param()
Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M.
[1] https://docs.basex.org/wiki/Request_Module
On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel D.Zimmel@ESVmedien.de Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX basex-talk@mailman.uni-konstanz.de Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
the mime type seems correct, all params are being sent. I do not have problems getting the body, only request:parameter-names() does not give any values. (request:header works, for example)
-----Ursprüngliche Nachricht----- Von: Marco Lettere m.lettere@gmail.com Gesendet: Mittwoch, 22. April 2020 15:31 An: Zimmel, Daniel D.Zimmel@ESVmedien.de; basex-talk@mailman.uni-konstanz.de Betreff: Re: AW: [basex-talk] A question about RESTXQ rest:form-param()
Are you setting the mime type to "application/x-www-form-urlencoded"? This is the prerequisite in order to get the body of a post parsed to form parameters. M.
On 22/04/20 15:22, Zimmel, Daniel wrote:
Thanks for the hint Marco,
I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here. I can access the full (unparsed) body, though (I can use that).
Daniel
-----Ursprüngliche Nachricht----- Von: Marco Lettere m.lettere@gmail.com Gesendet: Mittwoch, 22. April 2020 14:24 An: basex-talk@mailman.uni-konstanz.de Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param()
Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M.
[1] https://docs.basex.org/wiki/Request_Module
On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel D.Zimmel@ESVmedien.de Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX basex-talk@mailman.uni-konstanz.de Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
I set up this restxq [1]. And call it with something like [2]. Got an output of [3] which looks like what I expect. M.
[1] module namespace t = "urn:test";
declare %rest:path("test") %rest:POST %rest:consumes("application/x-www-form-urlencoded") %output:method("html") function t:test() { <html> <body> <p>{request:parameter-names() ! (. || "=" || request:parameter(.))}</p> </body> </html> };
[2] curl --location --request POST 'http://localhost:8984/test' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'param1=Hello' \ --data-urlencode 'param2=World'
[3] <html> <body> <p>param1=Hello param2=World</p> </body> </html>
On 22/04/20 16:03, Zimmel, Daniel wrote:
the mime type seems correct, all params are being sent. I do not have problems getting the body, only request:parameter-names() does not give any values. (request:header works, for example)
-----Ursprüngliche Nachricht----- Von: Marco Lettere m.lettere@gmail.com Gesendet: Mittwoch, 22. April 2020 15:31 An: Zimmel, Daniel D.Zimmel@ESVmedien.de; basex-talk@mailman.uni-konstanz.de Betreff: Re: AW: [basex-talk] A question about RESTXQ rest:form-param()
Are you setting the mime type to "application/x-www-form-urlencoded"? This is the prerequisite in order to get the body of a post parsed to form parameters. M.
On 22/04/20 15:22, Zimmel, Daniel wrote:
Thanks for the hint Marco,
I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here. I can access the full (unparsed) body, though (I can use that).
Daniel
-----Ursprüngliche Nachricht----- Von: Marco Lettere m.lettere@gmail.com Gesendet: Mittwoch, 22. April 2020 14:24 An: basex-talk@mailman.uni-konstanz.de Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param()
Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M.
[1] https://docs.basex.org/wiki/Request_Module
On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel D.Zimmel@ESVmedien.de Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX basex-talk@mailman.uni-konstanz.de Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
hmm, what is wrong with this stripped example?
######## form.xqm:
module namespace page = 'http://basex.org/examples/web-page';
declare %rest:path("/esv/fun/form") %rest:single
function page:form() {
let $body := <div> <form action="/esv/test-form" id="myform2" method="post"> <input type="text" name="foo"></input> <input type="hidden" name="key" value="key"/> <input type="submit" value="submit"></input> </form> </div> return (web:response-header(map {'method':'xhtml'}), $body) };
######## test-form.xqm:
module namespace esv = 'esv/queries';
declare %rest:POST("{$body}") %rest:form-param("key", "{$key}") %rest:path("/esv/test-form") %rest:consumes("application/x-www-form-urlencoded") %rest:single %output:method("text") function esv:test-form( $body as xs:string, $key as xs:string ) { "parameter-names(): " || request:parameter-names(), "$body: " || $body, "$key: " || $key };
######## output: parameter-names(): $body: foo=bar&key=key $key: key
Von: Marco Lettere m.lettere@gmail.com Gesendet: Donnerstag, 23. April 2020 10:40 An: Zimmel, Daniel D.Zimmel@ESVmedien.de; basex-talk@mailman.uni-konstanz.de Betreff: Re: AW: AW: [basex-talk] A question about RESTXQ rest:form-param()
I set up this restxq [1]. And call it with something like [2]. Got an output of [3] which looks like what I expect. M.
[1] module namespace t = "urn:test";
declare %rest:path("test") %rest:POST %rest:consumes("application/x-www-form-urlencoded") %output:method("html") function t:test() { <html> <body> <p>{request:parameter-names() ! (. || "=" || request:parameter(.))}</p> </body> </html> };
[2] curl --location --request POST 'http://localhost:8984/test' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'param1=Hello' \ --data-urlencode 'param2=World'
[3] <html> <body> <p>param1=Hello param2=World</p> </body> </html>
On 22/04/20 16:03, Zimmel, Daniel wrote:
the mime type seems correct, all params are being sent. I do not have problems getting the body, only request:parameter-names() does not give any values. (request:header works, for example)
-----Ursprüngliche Nachricht-----
Von: Marco Lettere m.lettere@gmail.commailto:m.lettere@gmail.com
Gesendet: Mittwoch, 22. April 2020 15:31
An: Zimmel, Daniel D.Zimmel@ESVmedien.demailto:D.Zimmel@ESVmedien.de; basex-talk@mailman.uni-konstanz.demailto:basex-talk@mailman.uni-konstanz.de
Betreff: Re: AW: [basex-talk] A question about RESTXQ rest:form-param()
Are you setting the mime type to "application/x-www-form-urlencoded"?
This is the prerequisite in order to get the body of a post parsed to form parameters.
M.
On 22/04/20 15:22, Zimmel, Daniel wrote:
Thanks for the hint Marco,
I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here.
I can access the full (unparsed) body, though (I can use that).
Daniel
-----Ursprüngliche Nachricht-----
Von: Marco Lettere m.lettere@gmail.commailto:m.lettere@gmail.com
Gesendet: Mittwoch, 22. April 2020 14:24
An: basex-talk@mailman.uni-konstanz.demailto:basex-talk@mailman.uni-konstanz.de
Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param()
Hi Daniel,
another way is to use request:* functions [1] available for programmatic inspection of the request.
Cheers,
M.
[1] https://docs.basex.org/wiki/Request_Module
On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht-----
Von: Zimmel, Daniel D.Zimmel@ESVmedien.demailto:D.Zimmel@ESVmedien.de
Gesendet: Mittwoch, 22. April 2020 11:27
An: BaseX basex-talk@mailman.uni-konstanz.demailto:basex-talk@mailman.uni-konstanz.de
Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
basex-talk@mailman.uni-konstanz.de