curl:URL位置1:(3)不匹配的括号;

时间:2019-01-19 23:12:50

标签: windows curl solr

我正在从此处运行Apache Solr教程:

http://lucene.apache.org/solr/guide/7_6/solr-tutorial.html

Solr正在运行,我可以在Web浏览器中运行查询。

本教程提到了我不熟悉的cURL

我已将CURL压缩为C:\Curl,并将Curl包含在PATH environment variable中:C:\Curl\curl-7.63.0-win64-mingw\bin

在Windows命令提示符下运行以下命令时,出现错误。我已经用Google搜索尝试找到无济于事的解决方法:

下面的代码:

C:\Curl\curl-7.63.0-win64-mingw\bin>curl -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema

产生以下错误:

curl: (3) unmatched brace in URL position 1:
{name:name,
 ^
curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
curl: (3) unmatched close brace/bracket in URL position 12:
stored:true}}'
           ^
{
  "responseHeader":{
    "status":400,
    "QTime":1},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"no stream",
    "code":400}}

我尝试添加-g来关闭glob。

curl -g -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema

这产生了几乎相同的错误:

C:\Curl\curl-7.63.0-win64-mingw\bin>curl -g -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema

curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
{
  "responseHeader":{
    "status":400,
    "QTime":1},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"no stream",
    "code":400}}

然后我尝试删除单引号并转义双引号,但随后出现以下错误:

curl -g -X POST -H Content-type:application/json --data-binary {\"add-field\": {\"name\":\"name\", \"type\":\"text_general\", \"multiValued\":false, \"stored\":true}} http://localhost:8983/solr/films/schema

卷曲:(3)使用错误/非法格式或缺少URL的URL curl:(3)使用错误/非法格式或缺少URL的URL curl:(3)使用错误/非法格式或缺少URL的URL curl:(3)使用错误/非法格式或缺少URL的URL {   “ responseHeader”:{     “状态”:500,     “ QTime”:4},   “错误”:{     “ msg”:“过早的EOF:char =(EOF),位置= 11 AFTER =”“,     “ trace”:“ org.noggit.JSONParser $ ParseException:过早的EOF:char =(EOF),position = 11 AFTER =”''\ r \ n \ tat org.noggit.JSONParser.err(JSONParser.java:419)\ r \ n \ tat org.noggit.JSONParser.next(JSONParser.j ava:973)\ r \ n \ tat org.noggit.JSONParser.nextEvent(JSONParser.java:1061)\ r \ n \ tat org.apache.solr.common.util.CommandOperation.parse(CommandOperation.java:285) \ r \ n \ tat org.apache.solr.common.util.Command Operation.readCommands(CommandOperation.java:350)\ r \ n \ tat org.apache.solr.common.util.CommandOperation.readCommands(CommandOperation.java:326)\ r \ n \ tat org.apache.solr.api。 ApiBag.getCommandOperations(A piBag.java:289)\r\n\tat org.apache.solr.servlet.HttpSolrCall.getCommands(HttpSolrCall.java:1073)\ r \ n \ tat org.apache.solr.servlet.SolrRequestParsers $ 1.getCommands(SolrRequestParsers .java:245)\ r \ n \ to o rg.apache.solr.schema.SchemaManager.performOperations(SchemaManager.java:77)\ r \ n \ tat org.apache.solr.handler.SchemaHandler.handleRequestBody(SchemaHandler.java:90)\ r \ n \ tat org。 apache.solr.handler.Requ estHandlerBase.handleRequest(RequestHandlerBase.java:199)\ r \ n \ tat org.apache.solr.core.SolrCore.execute(SolrCore.java:2541)\ r \ n \ tat org.apache.solr.servlet.HttpSolrCall。执行(HttpSolrCall.java:709)\ r \ n \ tat org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:515)\ r \ n \ tat org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:377)\ r \ n \ tat org.apache.solr.servlet.SolrDi spatchFilter.doFilter(SolrDispatchFilter.java:323)\ r \ n \ tat org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1634)\ r \ n \ tat org.eclipse.jetty.servlet。 ServletHandler.doHa ndle(ServletHandler.java:533)\ r \ n \ tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)\ r \ n \ tat org.eclipse.jetty.security.SecurityHandler。句柄(SecurityHandler.java:548)\ r \ n \ tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)\ r \ n \ tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257 )\ r \ n \ tat org.eclipse.je tty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)\ r \ n \ tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)\ r \ n \ tat org。 eclipse.jetty.server.handler。 ContextHandler.doHandle(ContextHandler.java:1317)\ r \ n \ tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)\ r \ n \ tat org.eclipse.jetty.servlet。 ServletHandler.doScope(Serv letHandler.java:473)\r\n\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)\ r \ n \ tat org.eclipse.jetty.server.handler.ScopedHandler。 nextScope(ScopedHandler.java:201)\ r \ n \ tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1219)\ r \ n \ tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144 )\ r \ n \ tat org.eclipse.jett y.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)\ r \ n \ tat org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)\ r \ n \ tat org。 eclipse.je tty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)\ r \ n \ tat org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)\ r \ n \ tat org。 eclipse.jetty.server.handler.Hand lerWrapper.handle(HandlerWrapper.java:132)\ r \ n \ tat org.eclipse.jetty.server.Server.handle(Server.java:531)\ r \ n \ tat org.eclipse.jetty.server.HttpChannel。句柄(HttpChannel.java:352)\r\n\tat org.eclipse .jetty.server.HttpConnection.onFillable(HttpConnection.java:260)\ r \ n \ tat org.eclipse.jetty.io.AbstractConnection $ ReadCallback.succeeded(AbstractConnection.java:281)\ r \ n \ tat org.eclipse .jetty.io.FillIn terest.fillable(FillInterest.java:102)\ r \ n \ tat org.eclipse.jetty.io.ChannelEndPoint $ 2.run(ChannelEndPoint.java:118)\ r \ n \ tat org.eclipse.jetty.util.thread .strategy.EatWhatYouKill.runTask(EatWhatYouKill .java:333)\ r \ n \ tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)\ r \ n \ tat org.eclipse.jetty.util.thread.strategy .EatWhatYouKill.tryProduce(EatWhatYouKill.java :168)\ r \ n \ tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)\ r \ n \ tat org.eclipse.jetty.util.thread.ReservedThreadExecutor $ ReservedThread .run(ReservedThreadExecutor。 java:366)\ r \ n \ tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:762)\ r \ n \ tat org.eclipse.jetty.util.thread.QueuedThreadPool $ 2.run (QueuedThreadPool.java:680)\r\n\tat java。 lang.Thread.run(未知来源)\ r \ n“,     “ code”:500}}

我知道在此问题上有很多类似的常见问题解答,但它们并不完全相同,而且我尝试过的所有解决方案都无法解决我的问题。

3 个答案:

答案 0 :(得分:3)

我用双引号替换了单引号,并用反斜杠将花括号内的双引号转义了,并且有效。

我从这里出发:

curl --X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema

对此:

curl --X POST -H "Content-type:application/json" --data-binary "{\"add-field\": {\"name\":\"name\", \"type\":\"text_general\", \"multiValued\":false, \"stored\":true}}" http://localhost:8983/solr/films/schema

谢谢大家的集体回答。我确信将JSON添加到单独的文件中可能会有一些好处,但是我想避免创建其他文件。

答案 1 :(得分:1)

Windows命令提示符不支持单引号。这是一个问题,因为cURL语句使用单引号指定JSON数据。

要解决此问题,请将JSON保存在一个单独的文件(例如add-field.txt)中,然后将其导入到cURL语句中,以便以后可以像这样运行它:

curl -X POST -H 'Content-type:application/json' --data-binary @add-field.txt http://localhost:8983/solr/films/schema

答案 2 :(得分:0)

我会走另一条路。如果您安装Microsoft的wonderfool工具WSL。您将能够像在Linux系统中一样运行所有这些命令。最终将节省大量时间。