【问题标题】:Python requests. 403 ForbiddenPython 请求。 403 禁止
【发布时间】: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>

请说出问题所在。

【问题讨论】:

    标签: python python-requests


    【解决方案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();
        }
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2014-10-31
      • 2012-02-03
      • 2016-08-17
      • 2010-09-27
      • 2019-01-26
      相关资源
      最近更新 更多