处理HTTPS请求 SSL证书验证

现在随处可见 https 开头的网站,urllib2可以为 HTTPS 请求验证SSL证书,就像web浏览器一样,如果网站的SSL证书是经过CA认证的,则能够正常访问,如:https://www.baidu.com/等...如果SSL证书验证不通过,或者操作系统不信任服务器的安全证书,比如浏览器在访问12306网站如:https://www.12306.cn/mormhweb/的时候,会警告用户证书不受信任。

一般会报着样的错

(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))

#解决办法1

import ssl
from urllib import request
#表示忽略未经核实的ssl正书认证
ssl._create_default_https_context = ssl._create_unverified_context
base_url = 'https://www.wbiao.cn'
response = request.urlopen(base_url)
print(response.read().decode('utf-8'))

#解决办法2

import requests
from lxml import etree
base_url = 'https://www.wbiao.cn'
#加verify=False
response = requests.get(base_url,verify=False)
response.encoding = response.apparent_encoding
html = response.text
print(html)
html = etree.HTML(html)
a_url = html.xpath('//div[@class="nav_left_menu"]//dd[@class="rel fl elps1"]/a[@rel="nofollow"]/@href')
print(a_url)

#第二种方法会报一个警告报错,直接忽视就可以!

如有错误请指出,谢谢!

猜你喜欢

转载自blog.csdn.net/yang_bingo/article/details/80840329