2016-03-16 5 views
1

Я использую почтовый запрос для доступа к веб-сайту, для которого требуется аутентификация. Если эта проверка подлинности неверна, я получаю ответ [401]. Я хочу проверить, является ли аутентификация неправильной, и если да, прекратите процесс и покажите какую-либо ошибку. Я не знаю синтаксис, чтобы проверить, является ли ответ 401.Как проверить ответ 401 на пост-запрос в python?

output = requests.post(cfg.get('HTTP', 'url'), data = query, verify=False, auth=HTTPBasicAuth(credentials['user'], credentials['pass'])) 

     if output == '<Response [401]>': 
      sys.exit('Incorrect Authentication. Please try again.') 
     else: 
      sys.exit('manual stop1') 

Вместо '<Response [401]>', я также пытался 'Response [401]', 'response [401]', '<Response[401]>', 'Response[401]', 'response[401]', '[401]', '401' и всех тех, без кавычки.

Я видел несколько ответов, используя флягу и json, но я надеялся не менять, как я запрашиваю данные. Спасибо!

+1

Вы рассматривали чтение документации? http://docs.python-requests.org/en/master/ - буквально первый пример показывает, как обрабатывать коды состояния HTTP. – jonrsharpe

+0

Похоже, вы предполагаете, что 'output' - это строка, когда это фактически класс' Response', поэтому все ваши сравнения терпят неудачу. – DaveBensonPhillips

+0

Я новичок в python, я не понял, что код состояния был тем же, что и ответ. Теперь я знаю, спасибо. –

ответ

2

Вы хотите атрибуту status_code

if output.status_code == 401: 
    ... 

Или, чтобы избежать жесткого кодирования чисел:

if output.status_code == requests.status_codes.codes.UNAUTHORIZEDD: 
    .... 
+2

Я думаю, что это должен быть 'request.status_codes.codes.UNAUTHORIZED', который равен 401, а не' METHOD_NOT_ALLOWED', который равен 405. – mhawke