首页 > 解决方案 > urllib.error.HTTPError:HTTP 错误 403:使用 urllib.requests 禁止

问题描述

我正在尝试从互联网上读取图像 URL,并能够通过 python 将图像放到我的机器上,我使用了这篇博文中使用的示例https://www.geeksforgeeks.org/how-to-open-an- image-from-the-url-in-pil/https://media.geeksforgeeks.org/wp-content/uploads/20210318103632/gfg-300x300.png,但是,当我尝试自己的示例时,它只是没有t 似乎工作我已经尝试了 HTTP 版本,它仍然给我 403 错误。有谁知道可能是什么原因?

import urllib.request

urllib.request.urlretrieve(
  "http://image.prntscr.com/image/ynfpUXgaRmGPwj5YdZJmaw.png",
   "gfg.png")

输出:

urllib.error.HTTPError:HTTP 错误 403:禁止

标签: pythonpython-requestsurlliburllib2http-status-code-403

解决方案


位于的服务器prntscr.com正在积极拒绝您的请求。这有很多原因。有些网站会检查调用者的用户代理,看看是否是这种情况。就我而言,我使用httpie来测试它是否允许我通过非浏览器应用程序下载。有效。于是我就简单地重用了一个用户头,看看是否只是缺少用户代理。

import urllib.request

opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'MyApp/1.0')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(
  "http://image.prntscr.com/image/ynfpUXgaRmGPwj5YdZJmaw.png",
   "gfg.png")

有效!现在我不知道服务器使用什么逻辑。例如,我尝试了一个标准Mozilla/5.0,但没有奏效。您不会总是遇到这个问题(只要您是合理的,大多数网站在允许的范围内都非常松懈),但是当您这样做时,请尝试使用用户代理。如果没有任何效果,请尝试使用与浏览器相同的用户代理。


推荐阅读