Вы можете отправлять сообщения на https://httpbin.org/post, и он вернет страницу с описанием полученных данных. В вашем первом случае он показал, что отправленные данные были
"data": "query=SELECT+COUNT%28%2A%29+FROM+EMPLOYEE"
, а во втором -
"data": "{\"query\":\"SELECT COUNT(*) FROM EMPLOYEE\"}"
Разница в том, что в первом случае data
был закодирован а второй (после учета дополнительных экранирований для кавычек) был json.
Глядя на документы запросов в Более сложные запросы POST , документально подтверждено, что если вы передадите dict to data
его форма закодирована, но если вы передадите строку, это не так. Ваш второй работает, потому что эта строка действительна json.
Поскольку вы передаете «application / json», вы должны просто передать строку в кодировке json. requests
имеет параметр, который будет выполнять кодировку за вас, просто переключитесь с использования data=
на json=
count_query="SELECT COUNT(*) FROM EMPLOYEE"
headers= {
'Content-Type': 'application/json',
'Authorization': 'Bearer'+' '+token}
data = {"query":count_query}
url='https:....................'
try:
response = requests.post(url, headers=headers, json=data)
print(response.json)
print(response.status_code)
except Exception as e:
print(e)