#python #json #http #python-requests
#python #json #http #python-запросы
Вопрос:
Использование python запрашивает доступ к API github.
response = requests.post('https://api.github.com/orgs/orgname/repos', auth, data)
Если запрос возвращает ошибку 405, я получаю HTML в response.text
<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
</body>
</html>
Если запрос возвращает ошибку 422, я получаю JSON в response.text
{"message":"Validation Failed","errors": [{"resource":"Repository","code":"custom","field":"name","message":"name already exists on this account"}],"documentation_url":"https://developer.github.com/v3/repos/#create"}
Могу ли я заставить API возвращать только JSON?
Если нет, могу ли я узнать, какого типа будет содержимое ответа?
Комментарии:
1. Чтобы узнать, в каком ответе будет содержаться содержимое, вы можете проверить
http response code
!2. Также, как я читал здесь: developer.github.com/v3/#schema все данные отправляются и принимаются как
JSON
, так что в вашем случае это может быть проблема с аутентификацией — или, другими словами, вы пытаетесь получитьnot-allowed
содержимое, и, возможно, именно поэтому сервер не отправляет ответ обратно, а вместо этого печатает сообщение not allowedHTML
…3. Вы можете
try: json.loads()
использовать, а затем, кроме html.
Ответ №1:
В ответ на:
Если нет, могу ли я узнать, какого типа будет содержимое ответа?
Если вы хотите знать, почему github возвращает html, а не JSON для вызова API, я не могу ответить на это; однако, чтобы ответить на заданный выше вопрос, вы можете посмотреть заголовок «content» http-ответа.
response = requests.post('https://api.github.com/orgs/orgname/repos', auth, data)
if "application/json" in response.headers['content-type']:
print response.json()
В ответ на:
Могу ли я заставить API возвращать только JSON? вы можете попробовать принудительно ввести заголовок «Принять» в запросе; однако это зависит от сервера GitHub, если он хочет использовать json в ответе
response = requests.post('https://api.github.com/orgs/omnifone/repos', auth=auth, data=data, headers={"Accept": "application/json"})