金融类的公司网站一样平常都是https 开头的网站,urllib.request可以为 HTTPS 要求验证SSL证书,就像web浏览器一样,如果网站的SSL证书是经由CA认证的,则能够正常访问,如:
安然好伙伴出单系统:https://icore-pts.pingan.com.cn/ebusiness/login.jsp浙商保险出单系统:https://core.zsins.com/pcis//core/main.jsp例子一:编写一个https要求程序访问(安然好伙伴出单系统)
from urllib import parse
import urllib.request
url = 'https://icore-pts.pingan.com.cn/ebusiness/login.jsp'
headers ={
\"大众User-Agent\公众: \公众Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36\公众,
}
# url 作为Request()方法的参数,布局并返回一个Request工具
request = urllib.request.Request(url,headers=headers)
# Request工具作为urlopen()方法的参数,发送给做事器并吸收相应
response = urllib.request.urlopen(request)
html = response.read().decode('utf-8')
print(html)
通过例子,是可以正常访问的,由于网站的SSL证书是经由CA认证的。
如果SSL证书验证不通过,或者操作系统不信赖做事器的安全证书,比如浏览器在访问12306网站如:https://www.12306.cn/mormhweb/的时候,会警告用户证书不受信赖。(听说 12306 网站证书是自己做的,没有通过CA认证)
例子二:编写一个https要求程序访问(12306网站)
from urllib import parse
import urllib.request
url = 'https://www.12306.cn/mormhweb/'
headers ={
\"大众User-Agent\"大众: \"大众Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36\公众,
}
# url 作为Request()方法的参数,布局并返回一个Request工具
request = urllib.request.Request(url,headers=headers)
# Request工具作为urlopen()方法的参数,发送给做事器并吸收相应
response = urllib.request.urlopen(request)
html = response.read().decode('utf-8')
print(html)
运行结果:
运行报错:ssl.CertificateError: hostname 'www.12306.cn' doesn't match either of 'webssl.chinanetcenter.com'
通过查看urllib.request库源码文件
如果网站的SSL证书是经由CA认证,就须要单独处理SSL证书,让程序忽略SSL证书验证缺点,即可正常访问。
例子三:12306网站或略SSL证书验证
from urllib import parse
import urllib.request
# 1. 导入Python SSL处理模块
import ssl
# 2. 表示忽略未经核实的SSL证书认证
context = ssl._create_unverified_context()
url = 'https://www.12306.cn/mormhweb/'
headers ={
\"大众User-Agent\"大众: \"大众Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36\"大众,
}
# url 作为Request()方法的参数,布局并返回一个Request工具
request = urllib.request.Request(url,headers=headers)
# Request工具作为urlopen()方法的参数,发送给做事器并吸收相应
# 3. 在urlopen()方法里 指明添加 context 参数
response = urllib.request.urlopen(request,context = context)
html = response.read().decode('utf-8')
print(html)
运行结果:
通过例子,证明我们的处理是成功的。