Отправка 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=(",", ": ")))

Спасибо:)

Другие вопросы по тегам