You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Requests中通过POST请求传递GraphQL查询与数据

用Python Requests发送GraphQL POST请求的正确姿势

GraphQL接口要求POST请求的请求体必须是标准JSON,且必须包含query字段(带变量时还要加variables)。你遇到的错误都是因为payload格式不合法,或者缺少必要字段。下面是具体解决方法:

1. 定义GraphQL查询字符串

把查询写成普通字符串,换行符可以保留(后续序列化时会自动处理),如果查询里有双引号,用单引号包裹整个字符串即可:

graphql_query = """
query GetUser($userId: ID!) {
  user(id: $userId) {
    name
    email
  }
}
"""

2. 构造合法的请求体

用Python字典封装query和变量(无变量可省略variables),这一步不用手动处理JSON转义,避免格式错误:

payload = {
    "query": graphql_query,
    "variables": {"userId": "123"}
}

3. 发送POST请求

直接把字典传给requests.post的json参数——Requests会自动将字典序列化为合法JSON,并设置Content-Type: application/json请求头,这是最稳妥的方式:

import requests

url = "https://your-graphql-api.com/graphql"
response = requests.post(url, json=payload)

# 查看响应结果
print(response.json())

常见问题排查

  • Invalid request payload JSON format:大多是因为手动拼接JSON字符串时,没正确转义查询里的双引号,或者误用了data参数而非json参数。用字典+json参数完全规避这类问题。
  • Must provide query string:说明请求体里没有query字段,或者字段值为空。检查payload字典是否包含"query"键,且对应值是有效的GraphQL查询。

对应curl命令的模拟示例

如果你的原始curl命令是:

curl -X POST -H "Content-Type: application/json" \
  -d '{"query": "query GetUser($userId: ID!) { user(id: $userId) { name email } }", "variables": {"userId": "123"}}' \
  https://your-graphql-api.com/graphql

上面的Python代码和这个curl命令完全等价,且更易维护。

内容的提问来源于stack exchange,提问作者DouxDoux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:40:07