【问题标题】:Python 3 error 403 when downloading file下载文件时 Python 3 错误 403
【发布时间】:2016-01-05 15:11:47
【问题描述】:

我正在使用脚本从 HTML 页面(通过邮件发送给我)获取下载链接,然后下载文件,该脚本已经运行了大约 6 个月,但上周我开始收到“403 错误”。

根据我的阅读和理解,问题是该网站阻止了我,认为它是一个机器人(不能否认),但我没有抓取该网站的 HTML 代码,只是在尝试使用requests.get 下载文件时,我只从一个特定站点收到此错误,其他站点我可以正常下载。

我尝试设置headers={'User-Agent': 'Mozilla/5.0'},但没有帮助。

这是下载文件的函数:

def download_file(dl_url, local_save_path):
        """Download URL to given path"""
        user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'

        auth_check = requests.get(dl_url, auth=(username.get(), password.get()), verify=False, headers={'User-Agent': user_agent})

        dnl_sum = 1024
        local_filename = dl_url.split('/')[-1]
        complete_name = os.path.join(local_save_path, local_filename)

        # Get file size
        r = requests.head(dl_url, auth=(username.get(), password.get()), verify=False, headers={'User-Agent': user_agent})
        try:
            dl_file_size = int(r.headers['content-length'])
            file_size.set(str(int(int(r.headers['content-length']) * (10 ** -6))) + "MB")
            c = 1
        except KeyError:
            c = 0
            pass
        # NOTE the stream=True parameter
        print('1')
        r = requests.get(dl_url, stream=True, auth=(username.get(), password.get()), verify=False, headers={'User-Agent': user_agent})
        print('2')
        while True:
            try:
                with open(complete_name, 'wb') as f:
                    for chunk in r.iter_content(chunk_size=1024):
                        if chunk:  # filter out keep-alive new chunks
                            f.write(chunk)
                            f.flush()
                            if c == 1:
                                download_perc.set(percentage(dl_file_size, dnl_sum))
                            elif c == 0:
                                print(dnl_sum)
                            dnl_sum = os.path.getsize(complete_name)
            except FileNotFoundError:
                continue
            break
    return

【问题讨论】:

  • 好的,你已经知道你被屏蔽了。您对我们有什么期望?我们无权解除对您的阻止。您应该意识到任何其他行为都可能是非法的。
  • 我怀疑它是基于 IP 的块,所以也许查找一些代理服务...
  • 我第二个怪胎。此外,您的 user_agent 看起来很安静。
  • 如果我手动下载文件(即单击邮件中的链接或在浏览器中输入 URL)我没有收到任何错误,所以我不认为我被阻止了,这也是是我们公司的内部网站,所以我不担心有任何违法行为。
  • @AlexZel 然后问问你的公司为什么他们突然开始回复 403。他们应该解除对你的阻止(是的,你被阻止了,这正是 403 的意思)。它将比代理请求更快、更容易和更可靠。

标签: python python-3.x python-requests python-3.4


【解决方案1】:

您是否尝试过使用代理? 你可以使用tor,它允许你动态IP地址和网站不能识别你。

试试这个https://techoverflow.net/blog/2015/02/06/using-python-requests-over-tor/

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 2018-01-03
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多