2016-12-07 2 views
0

Я использую следующий код, чтобы вернуть статус URLURL Python Возвращает Метод возвращает статус 200, несмотря на то, что 404

import requests 
answer = requests.get('http://www.website.com') 
answer.status_code 
>>>200 

, который дает мне обратно 200.

Однако, веб-сайт должен возвращать 404.

answer.content 
>>>b'<html><head>\r\n<title>404 Not Found</title>\r\n</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL index.php was not found on this server.</p>\r\n<hr>\r\n<address>Apache/2.2.22 (Linux) Server at Port <small onclick="document.getElementById(\'login\').style.display = \'block\';">80</small></address>\r\n</body></html><div id="login" style="display:none;"><pre align=center><form method=post>Password: <input type=password name=pass><input type=submit value=\'>>\'></form></pre></div>' 

может кто-нибудь сказать мне, где несоответствие происходит от и как я могу это исправить, чтобы получить answer.status_code = 404, как результат, а не 200? У меня нет прямого доступа к серверу, но я могу попросить администратора.

Спасибо!

+1

Это возможно что сайт, который вы извлекаете, возвращает статус 200, даже если возвращаемый контент имеет текст '404 Not Found' – JeremyK

+0

Используйте другой инструмент, например curl с опцией -v, чтобы получить все заголовки и содержимое. Чтобы подтвердить, что заголовки не совпадают. Вероятно, 404 генерируется внутри php-кода, и этот код не правильно устанавливает код состояния. – Nath

ответ

1

Requests Doc

Перенаправление и история запросов по умолчанию будут выполнять перенаправление местоположения для всех глаголов, кроме HEAD.

Мы можем использовать свойство history объекта Response для отслеживания перенаправления.

В списке Response.history содержатся объекты Response, которые были созданы для завершения запроса. Список сортируется от самого старого до самого последнего ответа.

Например, GitHub перенаправляет все HTTP-запросы HTTPS:

>>> r = requests.get('http://github.com') 

>>> r.url 
'https://github.com/' 

>>> r.status_code 
200 

>>> r.history 
[<Response [301]>] 

Если вы используете GET, OPTIONS, POST, PUT, DELETE или PATCH, вы можете отключить перенаправление обращения с параметром allow_redirects:

>>> r = requests.get('http://github.com', allow_redirects=False) 

>>> r.status_code 
301 

>>> r.history 
[] 

Если вы используете ГОЛОВУ, вы можете включить переадресацию, а также:

>>> r = requests.head('http://github.com', allow_redirects=True) 

>>> r.url 
'https://github.com/' 

>>> r.history 
[<Response [301]>] 
+0

Это похоже на копию, как это относится к его проблеме. У нас нет причин подозревать, что перенаправление является частью проблемы. Если вам это не нужно, вам нужно сделать этот случай – Nath

Смежные вопросы