python говорит, что код http-ответа равен 200, но сервер говорит 301
Я использую urllib python 3.запрос.функция urlopen (). В прошлом это прекрасно работало. На самом деле, я использовал его несколько месяцев назад для той же программы, и он работал нормально. Однако теперь сервер регистрирует 301 ответ всякий раз, когда я пытаюсь использовать api для публикации на своем сайте. когда я использую ответ.getcode() чтобы найти ответ, он говорит, что это 200.
Что могло бы вызвать это расхождение? Есть ли другой способ проверить, не сбился ли мой запрос, или способ его отладки? Лично у меня нет доступ к серверу, но я могу попросить администратора проверить их для меня.
Спасибо, ребята!
Edit
Я нашел HTTP-запросы в wireshark. Он отправляет запрос POST, получает 301 (text / html), затем отправляет запрос GET и получает 200 (application/json). Что это значит? Мой первоначальный запрос был json (я использовал urllib.запрос.urlopen (url, data)). Первый ответ для POST to http://sefaria.org/api/texts/Rashi_on_Berakhot.2a.1.1 это:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>301 Moved Permanently</title>
</head>
<body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.sefaria.org/api/texts/Rashi_on_Berakhot.2a.1.1">here</a>.</p>n
<hr>
<address>Apache/2.4.6 (Ubuntu) Server at sefaria.org Port 80</address>
</body>
</html>
Получить запрос на этот url отвечает 200
2 ответа:
Получается, что я отправлял сообщение в http://website.com вместо http://www.website.com ... выкрикивает.
Это не ожидаемое поведение при встрече с 301:
Если код состояния 301 получен в ответ на запрос, отличный от GET или HEAD, агент пользователя не должен автоматически перенаправлять запрос, если он не может быть подтвержден пользователем, поскольку это может изменить условия, при которых был выдан запрос.
(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html )
Вы должны рассмотреть возможность сообщения об этом как об ошибке в Python разработчики.