TNT*_*TNT 11 python python-requests
我正在尝试从 url 下载 zip 文件,但收到以下警告
InsecureRequestWarning: Unverified HTTPS request is being made to host 'www.ons.gov.uk'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
Run Code Online (Sandbox Code Playgroud)
我读了一点关于这一点的内容,大多数线程都围绕如何禁用它(如果您知道自己在做什么)以及整个一般概念。据我了解,库默认情况下request不能执行证书验证吗?为什么我应该向开源文件发出安全请求?我在这里暴露了自己的一些东西,我该如何解决这个问题?
这是我的代码
import pandas as pd
import requests
from requests.auth import HTTPBasicAuth
from zipfile import ZipFile
import io
url = "https://www.ons.gov.uk/file?uri=%2fpeoplepopulationandcommunity%2fhousing%2fdatasets%2fukhousebuildingpermanentdwellingsstartedandcompleted%2fcurrent/ukhousebuilding.zip"
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}, verify=False)
with ZipFile(io.BytesIO(response.content)) as myzip:
with myzip.open(myzip.namelist()[0]) as hfile:
df = pd.read_csv(hfile)
print(df)
Run Code Online (Sandbox Code Playgroud)
显然这个警告只在我使用时出现verify=False,它实际上不应该阻止这个警告吗?
抱歉问了太多问题,但我想了解这里发生的事情。如果我误解了这个概念,请纠正我。
据我了解,请求库默认情况下不能够执行证书验证吗?
是的,它确实。
为什么我应该向开源文件发出安全请求?
出于安全原因。您希望确保您确实从请求的来源获得了您期望的文件,而不对文件进行任何操作。
我在这里暴露了自己的一些东西,我该如何解决这个问题?
是的,你是。删除verify=False参数。
显然,只有当我使用 verify=False 时才会出现此警告,它实际上不应该阻止此警告吗?
不,这正是导致警告的原因。仔细阅读。它会警告您有关未经验证的 HTTPS 请求。由于您指定了该请求,因此该请求未经验证。
长话短说
如果请求在没有verify=False参数的情况下工作,则不应使用它。否则你仍然不应该使用它并寻找其他解决方案。
requests默认情况下会自行进行证书验证。您已明确指示图书馆不要这样做verify=False,因此会出现警告。
即使您可能认为请求的资源是公共的,您也应该尽可能地保护数据传输。如果没有正确的 TLS/SSL 验证,中间人攻击者就可以拦截您的连接。拦截可能会产生不同的结果:
根据使用所获取数据的代码,攻击者可能能够影响其执行,在最坏的情况下,他/她可能会尝试利用处理代码中的安全漏洞来实现计算系统的妥协(最终是远程代码执行)。