Python 请求。 403 禁止

Posted

技术标签:

【中文标题】Python 请求。 403 禁止【英文标题】:Python requests. 403 Forbidden 【发布时间】:2016-11-24 04:04:36 【问题描述】:

我需要解析 site,但我收到了错误 403 Forbidden。 这是一个代码:

url = 'http://worldagnetwork.com/'
result = requests.get(url)
print(result.content.decode())

它的输出:

<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>

请说出问题所在。

【问题讨论】:

【参考方案1】:

该页面似乎拒绝了未识别 User-AgentGET 请求。我使用浏览器 (Chrome) 访问了该页面并复制了 GET 请求的 User-Agent 标头(查看开发人员工具的“网络”选项卡):

import requests
url = 'http://worldagnetwork.com/'
headers = 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
result = requests.get(url, headers=headers)
print(result.content.decode())

# <!doctype html>
# <!--[if lt IE 7 ]><html class="no-js ie ie6" lang="en"> <![endif]-->
# <!--[if IE 7 ]><html class="no-js ie ie7" lang="en"> <![endif]-->
# <!--[if IE 8 ]><html class="no-js ie ie8" lang="en"> <![endif]-->
# <!--[if (gte IE 9)|!(IE)]><!--><html class="no-js" lang="en"> <!--<![endif]-->
# ...

【讨论】:

如果你懒得看网络标签,你也可以在 Chrome 开发者控制台中执行navigator.userAgent :) 拯救了我的一天,谢谢!几乎开始深入调查 SSL 证书的相关问题,但这是一种虚拟的反机器人防御。【参考方案2】:

只需添加到 Alberto 的答案:

如果添加user-agent后仍然得到403 Forbidden,则可能需要添加更多标头,例如referer

headers = 
    'User-Agent': '...',
    'referer': 'https://...'

标题可以在开发者工具的Network &gt; Headers &gt; Request Headers 中找到。 (按F12 切换。)

【讨论】:

感谢您的回答。虽然我没有在网络中找到标题 转到网络,刷新页面以显示请求,选择任何 http 请求(大多数都是),然后打开一个带有标题的新框,您应该向下滚动该列表,您将查找请求标头 我尝试将用户代理部分复制到标题中它不起作用。我在一些网站上听说它永远不会起作用。【参考方案3】:

如果您是服务器的所有者/管理员,并且接受的解决方案对您不起作用,请尝试 disabling CSRF protection (link to an SO answer)。

我使用的是 Spring (Java),因此设置需要您创建一个 SecurityConfig.java 文件,其中包含:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter 
    @Override
    protected void configure (HttpSecurity http) throws Exception 
        http.csrf().disable();
    
    // ...

【讨论】:

以上是关于Python 请求。 403 禁止的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中捕获 403 禁止

如何允许获取请求 - 403 禁止错误

收到 403 禁止错误。客户端身份验证方案“匿名”禁止 HTTP 请求

错误 403 禁止通过 ajax 请求服务器

HTTP 错误 403.9 - 禁止访问:连接的用户过多

Cakephp 3.4 AJAX 请求抛出 403 禁止错误