【发布时间】:2014-12-07 12:25:24
【问题描述】:
我正在使用 python 3 的 urllib.request.urlopen() 函数。在过去,它运行良好。事实上,几个月前我在同一个程序中使用过它,它运行良好。但是,现在,每当我尝试使用 api 在我的网站上发布时,服务器都会记录 301 响应。当我使用 response.getcode() 查找响应时,它显示为 200。
什么会导致这种差异?是否有另一种方法来检查我的请求是否失败,或者有一种调试方法?我个人无权访问服务器,但我可以让管理员帮我检查它们。
谢谢大家!
编辑
我在wireshark 中找到了HTTP 请求。它发送一个 POST 请求,得到一个 301 (text/html),然后它发送一个 GET 请求并得到 200 (application/json)。这是什么意思?我最初的请求是 json(我使用了 urllib.request.urlopen(url,data))。 POST 到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 的 GET 请求以 200 响应
【问题讨论】:
-
301 是一个重定向。
urllib是否有可能自动跟随重定向,然后在新位置获得 200?当所有其他方法都失败时,启动wireshark。 -
是的,这是可能的。我在wireshark中找到了请求,但是如何找到响应代码。如果它正在重定向,我如何找到它重定向的位置?我对wireshark不熟悉
-
它应该类似于this。您应该看到
HTTP/1.1 200 OK或HTTP/1.1 301 Moved Permanently或类似的东西。然后深入了解底部窗格中的协议特定层。
标签: python python-3.x http-redirect http-request