python - 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:禁止
解决方案
位于的服务器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
,但没有奏效。您不会总是遇到这个问题(只要您是合理的,大多数网站在允许的范围内都非常松懈),但是当您这样做时,请尝试使用用户代理。如果没有任何效果,请尝试使用与浏览器相同的用户代理。
推荐阅读
- ruby - 目标 Task-List-EvaluateTaskAttributes 超出速率限制
- wordpress - 用woocommerce上的自定义按钮短代码替换“添加到购物车”按钮
- amazon-web-services - 如何将变量的 terraform 输出导出/发布到 AWS SSM 参数存储
- elasticsearch - ElasticSearch API - 通过查询脚本参数更新 null_pointer_exception
- azure - 如果通过 ARM 部署,Azure 计划查询规则警报不会在阈值为零时触发
- angular - 带表格的角材料对话框
- angular - Angular Material Select - 想要将 mat-option 值链接到更大的输出
- python - 使用数据框从python中的现有列插入新列
- json - 如何将一个 json 对象解构为另一个 json 对象?
- android - 找不到更改 Android 应用名称的文档