现在随处可见 https 开头的网站,urllib2可以为 HTTPS 请求验证SSL证书,就像web浏览器一样,如果网站的SSL证书是经过CA认证的,则能够正常访问,

如果SSL证书验证不通过,或者操作系统不信任服务器的安全证书,比如浏览器在访问12306网站的时候,会警告用户证书不受信任。(据说 12306 网站证书是自己做的,没有通过CA认证)

警告用户证书不受信任

urllib2在访问的时候则会报出SSLError:

import urllib2
url = "https://www.12306.cn/mormhweb/"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
request = urllib2.Request(url, headers = headers)
response = urllib2.urlopen(request)
print response.read()

运行结果:

urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)>

所以,如果以后遇到这种网站,我们需要单独处理SSL证书,让程序忽略SSL证书验证错误,即可正常访问。

import urllib
import urllib2# 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 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
request = urllib2.Request(url, headers = headers)# 3. 在urlopen()方法里 指明添加 context 参数
response = urllib2.urlopen(request, context = context)
print response.read()

总结:解决方案包括下列两种方式:

1. 使用ssl创建未经验证的上下文,在urlopen中传入上下文参数

import ssl
import urllib2
context = ssl._create_unverified_context()
print urllib2.urlopen("https://www.12306.cn/mormhweb/", context=context).read()

2. 全局取消证书验证

import ssl
import urllib2ssl._create_default_https_context = ssl._create_unverified_context
print urllib2.urlopen("https://www.12306.cn/mormhweb/").read()

​​​​关于CA​​​​​​

CA(Certificate Authority)是数字证书认证中心的简称,是指发放、管理、废除数字证书的受信任的第三方机构,

CA的作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改,以及对证书和密钥进行管理。

现实生活中可以用身份证来证明身份, 那么在网络世界里,数字证书就是身份证。和现实生活不同的是,并不是每个上网的用户都有数字证书的,往往只有当一个人需要证明自己的身份的时候才需要用到数字证书。

普通用户一般是不需要,因为网站并不关心是谁访问了网站,现在的网站只关心流量。但是反过来,网站就需要证明自己的身份了。

python:urllib2.URLError urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed相关推荐

  1. Python [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 解决方法

    一个搭建在SAE上的Django应用,使用新浪微博提供的Python SDK已经稳定运行一年有余,但最近开始持续出现微博认证失败的状况. 摘录微博python SDK的错误提示如下所示: ERROR: ...

  2. 解决方案:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to

    解决方案:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to ...

  3. pip联网问题 SSLError(SSLError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748

    有时候你在conda中使用pip,即使在pip.conf中设置了trusted-host,还是不起作用,连不上网: $ pip search absl-py WARNING: pip is being ...

  4. ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to

    最近再用mac下的pycharm编写python文件,在抓取制定网站的错误提示每次运行都直接报错如下: ssl.SSLCertVerificationError: [SSL: CERTIFICATE_ ...

  5. [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

    错误: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727),报错问题就是证书验证失败,这种情况出现在网站使用 ...

  6. 解决ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

    问题 原代码: async def call_wss_api(msg):async with websockets.connect('wss://xxx.com/tool/handle') as we ...

  7. ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed问题解决

    问题复现 在使用django框架编写项目时,启动项目正常,访问url时报错 ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] ...

  8. GAE使用时的一些问题:urllib2.URLError: urlopen error [Errno 10061]

    问题描述: Win7系统下,在用GAE自己架设代理时,用appcfg.py update myapp/上传时出现urllib2.URLError: <urlopen error [Errno 1 ...

  9. 下载Pytorch的自带数据集时报错=urllib.error.URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]

    错误原因: 这是一个SSL证书验证错误,当请求一个https站点,但是证书验证错误时,就会报这样的错误. 解决办法: 只需在代码中加入如下两行将跳过证书的检查,即可成功访问网页. # 全局取消证书验证 ...

最新文章

  1. centos java tomcat_centos配置Tomcat以指定的身份(非root)运行
  2. rowid 对应mysql_请教一下相当于MySQL中Oracle的RowID
  3. 电子商务系统的设计与实现(九):后端管理系统功能细化
  4. Mysql 中Sql控制流语句_DCL语句/控制流语句
  5. ASP.NET页面生命周期概述(转载)
  6. java中方法_java中的方法
  7. ubuntu批量创建文件夹
  8. 变分模态分解python代码_VMD变分模态分解代码问题
  9. 使用STM32,接触USB功能
  10. spring boot 核心配置文件是什么?
  11. 维修 空调 碰上 骗子
  12. 基于.net的当下传统制造业MES系统的思考(一)
  13. 机器人控制学习机器编程代码_带上机器人,让他们维护我们的代码!
  14. python基础之实现len函数
  15. SkeyeRTSPLive传统视频监控互联网+实现利器解决方案
  16. EasyExcel 使用Converter 转换注入时报nullPoint异常
  17. 国家信息安全水平考试NISP一级模拟题(02)
  18. Go pprof 性能分析工具 - 详细使用图解
  19. 当前日期的周一,下周日期,下月日期;批次号生成
  20. Ubuntu安装腾讯APP

热门文章

  1. python实现表格_零基础小白怎么用Python做表格?
  2. 互联网协议 — BGP 边界网关协议 — Router(路由器)
  3. NR 5G 安全架构概述
  4. 解决网站搬家windows下解压图片文件名乱码问题的利器:Bandizip
  5. O11ycon会议讨论了可观察性的收益和挑战
  6. puppet安装常遇见的问题
  7. MailBee.NET Objects撰写邮件教程(一):添加和删除自定义标题
  8. HDU 1557 权利指数 国家压缩 暴力
  9. 查看IIS上面的每个网站分别用了多少内存
  10. Asp.net MVC突然变慢,缓存消失的一种原因