5

我正在尝试curl从 Windows 中的命令行运行命令,但对于我的生活,我无法弄清楚我应该如何逃避它。

我正在执行这个:

C:\WINDOWS\system32>curl --anyauth --user user:password -X POST -d "{\"rest-api\":{\"name\":\"BizSimDebug3\"}}" -H "Content-type: application/xml" http://localhost:8002/v1/rest-apis

我得到了这个:

<rapi:error xmlns:rapi="http://marklogic.com/rest-api">
  <rapi:status-code>400</rapi:status-code>
  <rapi:status>Bad Request</rapi:status>
  <rapi:message-code>RESTAPI-INVALIDCONTENT</rapi:message-code>
  <rapi:message>Your bootstrap payload caused the server to throw an error.  Underlying error message: XDMP-DOCROOTTEXT: xdmp:get-request-body() -- Invalid root text "{&amp;quot;rest-api&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;BizSimDebug3&amp;quot;}}" at  line 1</rapi:message>
</rapi:error>

我还需要做些什么来转义 -d 标志中的内部引号吗?还是我完全忽略了真正的问题?

4

3 回答 3

9

这适用于 Windows:

 
curl -i -X POST -H "Content-Type: application/json" -d "{\"Field1\": 123, \"Field2\": 456 }" "http://localhost:8080"
 
于 2014-03-12T20:35:54.907 回答
2

XDMP-DOCROOTTEXT错误表明服务器正在尝试将有效负载解析为XML失败。

Content-Type头告诉服务器您正在发送XML,但有效负载是JSON.

尝试将Content-Type标题更改为application/json

于 2013-02-20T14:00:17.973 回答
0

引用是地狱。通过“Windows 命令行和您的提示,我认为您的意思是 cmd.com ?。这与 linux shell 引用的内容不同。

对于这个简单的实验,我建议使用 2 种引号以避免转义但即使那样它也不太可能工作

curl --anyauth --user user:password -X POST -d "{'rest-api':{'name':'BizSimDebug3'}}" -H "Content-type: application/xml" http://localhost:8002/v1/rest-apis

使用类似 unix 的 shell 可能会带来更好的运气,例如运行 cygwin ( http://www.cygwin.com/ ) 或 xmlsh (www.xmlsh.org),它们会像 linux 一样逃逸。

你真的会做一场噩梦,通过 Windows 命令行本地运行任何复杂的东西。

-大卫

于 2013-02-19T21:54:03.770 回答