当前位置: 首页 > 知识库问答 >
问题:

无法使用cURL执行GraphQL变异

萧德馨
2023-03-14

我已经在MicroProfile容器(WildFly)中部署了一个突变,并且能够在GraphQL UI中执行它:

mutation Add {
  createOrder(order: {
      id: 1,
      type: "car"
      model: "Ferrari"
      price: 500
    }
  )
  {
    type
    model
    price
  }
}

然而,当我尝试使用cURL执行相同的突变时:

curl \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{ "query": "mutation Add {
  createOrder(order: {
      id: 1,
      type: \"car\"
      model: \"Ferrari\"
      price: 500
    }
  )
  {
    type
    model
    price
  }
}
" }' http://localhost:8080/demo/graphql

然而,它在以下方面失败了:

javax.json.stream.JsonParsingException: Unexpected char 10 at (line no=1, column no=27, offset=26)

我还没有发现很多使用cURL等命令行工具运行变种的例子,也不知道错误在哪里。有什么帮助吗?谢谢

共有2个答案

广绪
2023-03-14

这里我有一个使用curl、换行符、转义和缩进的工作变种。它看起来确实不太好看,但比oneliner更易于维护:https://stackoverflow.com/a/65837497/835098

我已经重新格式化了你的curl调用,现在应该可以工作了。注意输入和输出参数对你的突变进行了很好的缩进。你只需要担心在每一行的末尾添加反斜杠,并在“查询”字符串中转义反斜杠和引号。

哦,别忘了在每个输入参数后添加逗号。我想你最初的请求中缺少这些。

curl \
  -X POST \
  -H "Content-Type: application/json" \
  --data \
"{ \
    \"query\": \"mutation Add { \
        createOrder(order: { \
            id: 1, \
            type: \\\"car\\\", \
            model: \\\"Ferrari\\\", \
            price: 500 \
        }){ \
            type \
            model \
            price \
        } \
    } \
} \
" http://localhost:8080/demo/graphql
上官鸿朗
2023-03-14

您通过curl发送json数据,json规范不允许换行。它们需要替换为“\n”字符。

curl \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{ "query": "mutation Add { createOrder(order: {id: 1, type: \"car\", model: \"Ferrari\", price: 500}){type\n model\n price\n}}" }' http://localhost:8080/demo/graphql

有关其他建议,请参见此问题:在到graphqlendpoint的curl查询中,多行“--data”的正确格式?

 类似资料:
  • 所以我不知道这是否真的描述了我的问题,但这是我能得到的最接近的吗? 我正在使用AWSAppsyncClient进行一些GraphQL突变。由于模型的性质,在更大程度上,由于我缺乏经验,我需要创建一个记录,然后创建两个依赖于第一个的记录,然后才能将它们链接到数据库中。 目前,我正在进行第一次变异,它返回所创建记录的ID。然后在查询返回的promise中创建中间记录。它基本上看起来像: 问题是Prom

  • 我正在使用java执行一个curl命令。 我想在我的代码中获取这个curl命令的输出,但是我的stdoutout是空的。 尝试手动执行curl命令,工作正常。然后我打印了标准误差,我可以看到: 当curl命令被手动执行时,它工作得很好,那么为什么不通过Runtime.getRuntime()呢? 请建议!!任何帮助将不胜感激。

  • 目前,我正在从这里学习sangria-graphql。然而,我找不到任何关于突变(添加,更新,删除)的文档。还有,谷歌也不会帮我多少。你们能给我提供什么好的资源吗?

  • 问题内容: 我有这个代理地址: 如何使用cURL之类的来执行HTTP请求,但指定网络的代理地址? 问题答案: 一般方式: 然后,您可以通过来自(许多)应用程序的代理进行连接。 并且,按照下面的注释,对于https:

  • 我试图在我的ksh程序的curl命令中使用两个变量,但它不起作用。

  • 问题内容: 尝试安装NPM时收到此错误。非常感谢对此错误的任何帮助。 从http:// …-> https://更改了命令,仍然没有运气。 其他资讯: 作业系统:Mac OSX 10.8.2 CURL:curl 7.24.0(x86_64-apple-darwin12.0) 因此,我尝试以超级用户身份进行安装,并很快遇到了这堆文字。 我在这里完全迷路了。 问题答案: 您将获得install.sh脚