我正在使用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>
该网址的GET请求以200
响应答案 0 :(得分:1)
事实证明我发布的是http://website.com而不是http://www.website.com ... 哎呦。
答案 1 :(得分:-1)
遇到301时,这不是预期的行为:
如果收到301状态代码以响应GET或HEAD以外的请求,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变请求的条件。发出的。
(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)
您应该考虑将此报告为Python开发人员的错误。