【问题标题】:Request works fine in browser but 403 in python请求在浏览器中工作正常,但在 python 中为 403
【发布时间】:2014-04-21 03:25:29
【问题描述】:

我在 Python 中使用 Requests 库。在浏览器中,我的 URL 加载正常。在 Python 中,它会抛出 403。

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /admin/license.php on this server.</p>
<p>Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

这是我自己的网站,据我所知,它没有任何机器人保护。我制作了我正在加载的 PHP 文件,它只是一个简单的数据库查询。在站点的根目录中,我有一个具有默认设置的 WordPress 站点。但是,我不确定这是否相关。

我的代码:

import requests
url = "myprivateurl.com"
r = requests.get(url)
print r.text

有没有人猜到为什么 Python 会抛出 403 而不是浏览器会抛出 403?

非常感谢。

【问题讨论】:

  • 能贴出对应的python代码吗?
  • 您是否通过浏览器访问了该网址?是否给出相同的403
  • 通过 Firefox,它不会给出 403,没有错误。加了代码,虽然我觉得没多大用处。
  • 您在浏览器中查看时是否进行了任何身份验证?
  • 无身份验证。此外,我在我的虚拟主机上尝试了更多 URL,它们都使用相同的请求代码提供 403。尽管如此,几乎所有内容都被谷歌机器人索引。我将联系我的虚拟主机,尽管我认为这与他们没有任何关系。

标签: python python-requests http-status-code-403


【解决方案1】:

在联系我的虚拟主机并将票证升级到 2 级支持后,他们禁用了 mod_security,现在它工作正常。不确定这是否是一件坏事,但解决了它。

【讨论】:

    【解决方案2】:

    向请求中添加标头对我有用:

    req = urllib.request.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7')
    response = urllib.request.urlopen(req)
    data = response.read()      # a `bytes` object
    html = data.decode('utf-8') # a `str`; this step can't be used if data is binary
    return html
    

    【讨论】:

      【解决方案3】:

      myprivateurl.com 不是有效的 URL。 Firefox 经历了许多用户友好的行为来猜测您的实际意思,并且(在某种程度上取决于解析器结果等)最终以http://myprivateurl.com/ 之类的方式结束。请求不这样做;您必须传入一个真实有效的 URL。

      【讨论】:

      • 既然他收到了 403 错误,可以肯定地说问题不在于 URL,否则他会收到 DNS 错误。
      猜你喜欢
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2014-01-13
      • 2015-11-14
      • 1970-01-01
      相关资源
      最近更新 更多