浏览器请求正常但在Python中返回403

4 投票
3 回答
3673 浏览
提问于 2025-04-18 03:33

我在用Python的Requests库。我的网址在浏览器里能正常打开,但在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错误,而在浏览器里却没有?

非常感谢。

3 个回答

0

myprivateurl.com 不是一个有效的网址。Firefox 浏览器会尝试通过一些用户友好的方式来猜测你真正想要访问的内容,最后可能会变成像 http://myprivateurl.com/ 这样的格式。不过,Requests 这个库可不这样做;你必须提供一个真实有效的网址。

3

给请求添加头部信息对我来说有效:

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

我联系了我的网站托管服务商,并把问题升级到二级支持,他们关闭了mod_security,现在一切正常了。我不太确定这样做是不是不好,但问题解决了。

撰写回答