如何在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
相关产品推荐
相关产品推荐

