我在curl中运行以下行,试图设置couchdb复制:
curl -X POST -d '{"source":"http://user:password@siteA.com:5984/main","target":"main"}' -H 'Content-Type: application/json' http://user:password@siteB.com/_replicate
它一直返回以下错误:
{"error":"bad_request","reason":"invalid UTF-8 JSON"}
据我所知JSON似乎是有效的。什么好主意吗?
我也在用Powershell
这种事在我身上也发生过很多次。PowerShell解析器(谁知道为什么)删除json.
中的引号。所以它发送它到curl像'{source:http://user:password@siteA.com:5984/main,target:main}'你需要这样调用它:
curl -X POST -d '{"""source""":"""http://user:password@siteA.com:5984/main""","""target""":"""main"""}' -H 'Content-Type: application/json' http://user:password@siteB.com/_replicate
查看http://pscx.codeplex.com/模块。EchoArgs
可能有助于发现这些问题。
查看CouchDB wiki,我发现这可能对解决您的问题很有用。基本上在Windows下,您需要转义特殊字符或将JSON写入文件并从curl CLI中使用。
我以前有过curl和PowerShell的问题-我的解决方案是从批处理文件(输出到PowerShell变量)中调用它…我认为这可能与传递给curl的参数被误解的方式有关-我从来没有找到它的底部,因为这是工作的…
也许这可以帮助http://huddledmasses.org/the-problem-with-calling-legacy-or-native-apps-from-powershell/
为了不手动编写所有json部分,当您使用powershell时,您应该尝试PSCouchDB。
副本:
PS >using module PSCouchDB
PS >$rep = New-Object PSCouchDBReplication -ArgumentList 'main','main_rep'
PS >$rep.SetContinuous()
PS >New-CouchDBReplication -Data $rep -Authorization "admin:password"
参考:https://pscouchdb.readthedocs.io/en/latest/server.html create-replica