Charles –
Adding the @method attribute doesn't seem to have any effect. Maybe defaulting to auto or digest when it's missing is an undocumented feature.
The way I understood xdmp:url-encode, it's supposed to be functionally similar to encode-for-uri but with prettier, more human-readible output. The W3C function is fine for our purposes, but I thought it was odd that xdmp:http-get didn't like the output
of xdmp:url-encode.
It's not a show stopper, but if no one knows I can punt this to support and report back.
-Will
From: Charles Greer <cgr...@marklogic.com>
Organization: MarkLogic Corporation Reply-To: MarkLogic Discussion <general@developer.marklogic.com> Date: Thursday, February 21, 2013 1:31 PM To: MarkLogic Discussion <general@developer.marklogic.com> Subject: Re: [MarkLogic Dev General] Dynamically building a structured query Hi Will,
I'm surprised that url-encode and encode-for-uri are different; maybe somebody more knowledgeable can explain that one. All things equal, I'd prefer the w3c function that you found. I'm assuming that 401 is a bit closer to the solution, not a different error -- are you missing a method attribute on http:authentication? The default REST server requires method="digest" Charles On 02/21/2013 01:19 PM, Will Thompson wrote:
After some testing, it appears that xdmp:http-get doesn't like xdmp:xdmp:url-encode output, but it's okay with fn:encode-for-uri. The call is to a self-signed SSL appserver. This works:let $rest-url := concat($url, 'v1/values/uris?options=uris&format=xml&structuredQuery=', fn:encode-for-uri(xdmp:quote($q))) return xdmp:http-get($url, <options xmlns="xdmp:document-get" xmlns:http="xdmp:http">{ element http:authentication { element http:username { 'user' }, element http:password { 'pass' } } } <http:verify-cert>false</http:verify-cert> </options>) But swapping fn:encode-for-uri for xdmp:url-encode results in a 401 error: <response xmlns="xdmp:http"> <code>401</code> <message>Unauthorized</message> <headers> <www-authenticate>Digest realm="public", qop="auth", nonce="c975aeaf1b6774e1a51f5b30d9ca7c61", opaque="a08df0deda23d70d"</www-authenticate> <content-type>application/xml</content-type> <server>MarkLogic</server> <content-length>211</content-length> <connection>close</connection> </headers> </response> <rapi:error xmlns:rapi="http://marklogic.com/rest-api"> <rapi:status-code>401</rapi:status-code> <rapi:status>Failed Auth</rapi:status> <rapi:message-code/> <rapi:message>Unauthenticated</rapi:message> </rapi:error> I tested saving the output of both functions to a local file and using those strings to hit the endpoint from a browser, and they both worked. Is this a bug or something I likely don't understand about http-get and/or url-encode? -Will From: Charles Greer <cgr...@marklogic.com <mailto:cgr...@marklogic.com>> Organization: MarkLogic Corporation Reply-To: MarkLogic Discussion <general@developer.marklogic.com <mailto:general@developer.marklogic.com>> Date: Wednesday, February 20, 2013 4:24 PM To: MarkLogic Discussion <general@developer.marklogic.com <mailto:general@developer.marklogic.com>> Subject: Re: [MarkLogic Dev General] Dynamically building a structured query Hi Will, What's wrong with double quotes? Are you looking to encode the whole shebang? How about concat($url, $path, "?options=uris&structuredQuery=", xdmp:url-encode(xdmp:quote($structured-query-xml))) Charles On 02/20/2013 04:06 PM, Will Thompson wrote: > This is kind of a pedantic style-related question, but I am building a > structured query and want to submit it to the REST values endpoint. However, > that endpoint doesn't like double quotes, so I can't do something tidy like: > concat($url, $path, "?options=uris&structuredQuery=", > xdmp:quote($structured-query-xml)) because xdmp:quote outputs double quotes for > the namespace declaration. I tried POSTing the XML, but the values endpoint only > accepts GET requests (?). I couldn't find an option to force xdmp:quote to > serialize attributes using single quotes (maybe that’s not technically allowed?). > > Is there a better way to approach this, or is my best option to just replace the > double quotes from xdmp:quote output? > > -Will > > > > > _______________________________________________ > General mailing list > General@developer.marklogic.comhttp://developer.marklogic.com/mailman/listinfo/general -- Charles Greer Senior Engineer MarkLogic Corporation charles.gr...@marklogic.com Phone: +1 707 408 3277 www.marklogic.com -- Charles Greer Senior Engineer MarkLogic Corporation charles.gr...@marklogic.com Phone: +1 707 408 3277 www.marklogic.com |
_______________________________________________ General mailing list General@developer.marklogic.com http://developer.marklogic.com/mailman/listinfo/general