Blu*_*rie 4 python python-requests
我只想着如何模仿浏览器,比如Chrome,用Python检测网站的协议.例如我们在地址栏上键入"stackoverflow.com",然后按Enter键,浏览器可以自动检测并更改网址为" https://stackoverflow.com "(添加网站的协议),我想知道我们怎么能在Python,完全像:
url = "stackoverflow.com"
browser = Browser (url) # Browser is a class that we can get website content from url, get its protocol,...
print browser.protocol
Run Code Online (Sandbox Code Playgroud)
HTTPS
是否有任何图书馆或套餐可以帮助您做到这一点?非常感谢.
编辑:我的问题是独特的,因为如果我们输入http,其他问题如何重定向到https,正如我所提到的,我们可以在没有伪协议的情况下在第一阶段自动检测吗?
Bur*_*lid 10
它适用于stackoverflow,因为当您第一次访问端口80(http端口)上的stackoverflow.com时,stackoverflow的服务器会通知浏览器该链接已永久移动到https.
要在Python中检测相同内容,请使用requests库,如下所示:
>>> import requests
>>> r = requests.get('http://stackoverflow.com') # first we try http
>>> r.url # check the actual URL for the site
'https://stackoverflow.com/'
Run Code Online (Sandbox Code Playgroud)
要了解URL的更改方式,请查看历史记录对象,您将看到301响应,这意味着URI已永久移动到新地址.
>>> r.history[0]
<Response [301]>
>>> r.history[0].url # this is the original URL we tried
'http://stackoverflow.com/'
Run Code Online (Sandbox Code Playgroud)
当您输入一个不带http://或https://的url 时,浏览器会自动假定您正在使用http://并在端口 80 上发送请求。
如果该站点将您重定向到某个https站点,您将获得两个值得注意的标题。一个将有301的响应,表示非错误重定向。另一个将是101,表示您正在升级您的连接类型。
如果您打开一个新选项卡并http://stackexchange.com在 Web 浏览器的开发人员工具套件的网络选项卡上加载并观看这些包,您就会看到这种情况发生。
笔记:
这两个代码都依赖于支持此行为的主机。并非所有网站都会自动将您重定向到某个https://网站。此外,并非所有人都支持http2,因此您可能无法获得101升级。
如果您真的想确定是否https://为首选选项,则可能需要在未获得重定向时手动检查它是否存在。