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-Agent
的 GET
请求。我使用浏览器 (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 > Headers > 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 禁止的主要内容,如果未能解决你的问题,请参考以下文章