将 httpie post 请求转换为 python 请求库
Convert httpie post request to python requests library
我很难将使用 htppie 的 post 请求转换为 python requests.post。这个问题一般是关于如何进行这样的转换,但我将以我正在做的具体请求为例。
所以我有以下使用 httpie 的 post 请求,它工作正常:
http post https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-mainnet query='{ indexers {
id
}
}'
但是,当尝试使用 pythons 请求库发送相同的请求时,我尝试了以下操作:
import requests
url = 'https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-mainnet'
query = """'{ indexers {
id
}
}'"""
print(requests.post(url, data = query).text)
这给出了一个服务器错误(我尝试了很多版本,以及为数据变量发送字典,它们都给出了相同的错误)。服务器错误为 GraphQL server error (client error): expected value at line 1 column 1
。
不管服务器错误是什么(可能是服务器特定的),这至少意味着这两个请求显然不完全相同。
那么我该如何将此 httpie 请求转换为使用 pythons 请求库(或任何其他 python 库)?
要传递请求负载,您需要将 json 作为字符串传递(我使用 json.dumps()
进行转换)。要将正文作为表单数据传递,只需传递 dict。
import json
import requests
url = 'https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-mainnet'
payload=json.dumps({'query': '{indexers {id}}'})
headers = {
'Content-Type': 'application/json',
}
response = requests.post(url, headers=headers, data=payload)
注意。我建议您尝试在 Postman 中发出此请求,然后您可以在 Postman 中将代码转换为 Python。
我很难将使用 htppie 的 post 请求转换为 python requests.post。这个问题一般是关于如何进行这样的转换,但我将以我正在做的具体请求为例。
所以我有以下使用 httpie 的 post 请求,它工作正常:
http post https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-mainnet query='{ indexers {
id
}
}'
但是,当尝试使用 pythons 请求库发送相同的请求时,我尝试了以下操作:
import requests
url = 'https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-mainnet'
query = """'{ indexers {
id
}
}'"""
print(requests.post(url, data = query).text)
这给出了一个服务器错误(我尝试了很多版本,以及为数据变量发送字典,它们都给出了相同的错误)。服务器错误为 GraphQL server error (client error): expected value at line 1 column 1
。
不管服务器错误是什么(可能是服务器特定的),这至少意味着这两个请求显然不完全相同。
那么我该如何将此 httpie 请求转换为使用 pythons 请求库(或任何其他 python 库)?
要传递请求负载,您需要将 json 作为字符串传递(我使用 json.dumps()
进行转换)。要将正文作为表单数据传递,只需传递 dict。
import json
import requests
url = 'https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-mainnet'
payload=json.dumps({'query': '{indexers {id}}'})
headers = {
'Content-Type': 'application/json',
}
response = requests.post(url, headers=headers, data=payload)
注意。我建议您尝试在 Postman 中发出此请求,然后您可以在 Postman 中将代码转换为 Python。