python说http响应代码是200,但服务器说301

时间:2014-10-13 00:48:00

标签: python python-3.x http-redirect http-request

我正在使用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

响应

2 个答案:

答案 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开发人员的错误。