[英]How to post XQuery code to MarkLogic using cURL from Ubuntu?
我正在使用Ubuntu機器。 我正在使用curl命令進行POST調用,並以字符串格式將xquery代碼作為--data發送。 作為回應我得到以下錯誤:
xdmp:database()HTTP/1.1 500 REST-UNSUPPORTEDPARAM: (rest:UNSUPPORTEDPARAM) Endpoint does not support query parameter: xdmp:database()
下面是完整的curl命令
curl -v --digest -u username --request POST "http://host:port/qconsole/endpoints/evaler.xqy?dbid=someid&querytype=xquery&action=eval" --data "xdmp:database()"
在上面的命令基本上我試圖在目標機器上運行xquery代碼(主機:端口/端點/ evaler.xqy)
這是傳遞xquery代碼的正確方法嗎?
更新:
我正在使用ML 7
傳遞頭文件后,我能夠運行XQuery代碼,但又面臨一個問題。
當我傳遞“xdmp:database()”作為數據它工作正常(參見下面的命令),在響應中我得到數據庫ID。
curl -v --digest -uusername --data "xdmp:database()" --header "Content-type:text/x-www-form-urlencoded" --header "Accept: multipart/mixed; boundary=BOUNDARY" --request POST "http://host:port/qconsole/endpoints/evaler.xqy?dbid=dbid&querytype=xquery&action=eval"
當我嘗試傳遞“let $ x:= 10 return $ x”作為數據時(如下面的命令所示)我得到了
x:未定義的變量
甚至不要求密碼!!
curl -v --digest -u username --data "let $x := 10 return $x" --header "Content-type:text/x-www-form-urlencoded" --header "Accept: multipart/mixed; boundary=BOUNDARY" --request POST "http://host:port/qconsole/endpoints/evaler.xqy?dbid=dbid&querytype=xquery&action=eval"
無法弄清楚,我做錯了什么。
請幫忙。
下面是一些使用cURL從stdin中評估JavaScript的示例bash 。 (更改為XQuery只是更改參數名稱的問題。)
#!/usr/bin/env bash
# Pipes stdin as the JavaScript body of a REST Client API eval request
#
# Usage:
# cat cat mycode.js | awk … | curl … @-
# pbpaste | awk … | curl … @-
awk '{print "javascript="$0}' | curl http://localhost:8000/v1/eval --digest -u "$USER":"$PASS" -X POST -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: multipart/mixed' -d @-
您需要適當地設置$USER
和$PASS
變量。
如果使用MarkLogic 8+,則應使用/ v1 / eval,如@grtjn所述。 由於您使用了marklogic-7標記,因此它看起來像是在ML7上。
無論版本如何,最重要的選擇是為這個代碼應該做的任何事情創建一個REST API擴展 ,假設你沒有嘗試支持任意XQuery執行。 如果是,您可以創建一個模仿/ v1 / eval所做的擴展。 更好的是,如果可以的話,升級到ML8並使用/ v1 / eval本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.