Отправка JSON POST с использованием urllib2 приводит к HTTP 422
У меня возникла проблема при отправке запроса JSON к API. Я добавил заголовки типов приложений, хотя API все еще отвечает HTTP 422. Данные файла JSON действительны, проверено с помощью jsonlint.
post_config = urllib2.Request(config_url)
post_config.add_header('AUTHORIZATION', 'Token token=hash')
post_config.add_header('Content-Type', 'application/json')
post_data = json.dumps(post_data)
print post_data
>>{"type": "numeric", "instance_id": "e0140", "name": "name0140", "uid": "970ebb1b2549b4dd5254", "instance_type": "Recommended", "power": "high"}
send = urllib2.urlopen(post_config, post_data)
Результаты в:
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 558, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 422: Unprocessable Entity
1 ответ
Попробуйте вместо этого использовать модуль запросов и посмотрите, получаете ли вы тот же ответ.
Пример сниппета о том, как отправить сообщение в конечную точку REST
import requests
import json
url = 'http://example.com/endpoint'
headers = {'Content-type': 'application/json'}
data = json.dumps(post_data)
print(data)
r = requests.post(url, data=json.dumps(payload),headers=headers)
print(r.status_code)
Подобный ответ связан с ответом Мухаммеда Ашмави;
Я получил ту же ошибку и понял, что это произошло из-за сбоя проверки на стороне сервера с вашими почтовыми данными.
Решение:
использование requests.post
вместо urllib.request.Request
тогда вы можете получить точное сообщение об ошибке для этого сервера 422
код ошибки.
Образец кода:
import requests
API_URL = "***"
TOKEN = "***"
HEADERS = {
"User-Agent": "Python API Sample",
"Authorization": "Bearer " + TOKEN,
"Content-Type": "application/json"
}
data = {
"user_id": "***",
"project_id": "***"
}
json_data = json.dumps(data).encode('utf8')
response = requests.post(url=API_URL, headers=HEADERS, data=json_data)
print(json.dumps(json.loads(response.text), sort_keys=True, indent=4, separators=(",", ": ")))
Спасибо:)