首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
宝塔
V2EX  ›  Python

请教一下,为什么只有我的电脑跑爬虫会出现 SSLCertVerificationError ?

  •  
  •   tankb52 · 93 天前 · 2455 次点击
    这是一个创建于 93 天前的主题,其中的信息可能已经有所发展或是发生改变。

    具体报错信息如下

    requests.exceptions.SSLError: HTTPSConnectionPool(host='www.amazon.com', port=443): Max retries exceeded with url: /product-reviews/B07GBP3GH9/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)'
    

    爬一些亚马逊上评论会出现这个错误(是自家产品,不涉及侵权),在 r = requests.get(self.url + str(page_n), headers=header, timeout=30)最后面添加, verify = False 就不会报错。

    只在我的电脑上出现这个问题,其他同事的电脑上运行正常。

    同时发现我电脑上pip install moudlename时也会报这个错误。搜索以后已经将 pip 升级到 19.2.2,或者说是所有的模块都已更新到最新。 最后解决方案是在 pip.ini 中加入以下内容

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org
    

    但是爬虫依然有问题,我电脑换用同事的网络也不行,走手机热点电信网络也不行。

    我怀疑是我电脑上某个证书出问题了,怎么排查呢? 最开始在自己电脑上鼓捣爬虫时动过很多设置,这次脚本是同事发过来的,在别人电脑上跑都通过了。

    第 1 条附言  ·  93 天前
    Windows 10 系统。
    同事的 Mac 和 Windows 10 都没问题。
    我自己添加 verify = False 就不会报错。
    但我还是想找到原因,毕竟也影响到了 pip install。
    32 回复  |  直到 2019-10-29 09:18:53 +08:00
        1
    warcraft1236   93 天前
    是不是有代理啥的,劫持了证书。然后系统里边是不是安装了什么第三方证书,然后配置的还不对?只想到这些了,你的问题还真没遇到过
        2
    jackleeforce3615   93 天前
    def init_ssl():
    ssl._create_default_https_context = ssl._create_unverified_context
        3
    jackleeforce3615   93 天前
    上面这个函数有没有执行过?
        4
    tankb52   93 天前
    @warcraft1236 #1
    我也怀疑是这个原因,那如何排查呢?
        5
    tankb52   93 天前
    @jackleeforce3615 #2 加了也是一样的报错。
        6
    wongyusing   93 天前
    这个我没记错应该是证书问题。
    试一下把 https 改成 http。
    上次我就这样解决了
    不行的话,查一下配置证书方面的知识
        7
    BigDogWang   93 天前
    你用的 request 吗?直接参数声明不做 ssl 检查就可以了
        8
    lusi1990   93 天前
    是 linux 吗?是自己编译的吗?如果是的话
    sudo apt-get install -y openssl
    sudo apt-get install -y libssl-dev
    sudo apt-get install -y zlib*
    然后重新编译, 安装
        9
    sodora   93 天前 via Android
    可能是系统时间问题。当前系统时间处在证书有效期之外。
        10
    tankb52   93 天前
    @BigDogWang #7
    是添加 verify = False 吗?添加了就不会报错。但我还是想到的原因。
        11
    tankb52   93 天前
    @lusi1990 #8
    windows 10,同事的 Mac 和 windows 10 上面也不会报错,所以不应该是 系统问题。
        12
    supervipcard   93 天前
    重装下 Python 试试
        13
    Keyes   93 天前
    @tankb52 把证书 dump 出来,看一下 issue 是谁的,可能性比较大的是缺少了中级证书,另一个就是网关上有中间人
        14
    tankb52   93 天前
    @Keyes #13

    这个?为什么别人没有问题呢?

    DO_NOT_TRUST_FiddlerRoot
    DO_NOT_TRUST_BC
    Created by http://www.fiddler2.com
        15
    tankb52   93 天前
    @supervipcard #12 重装过,无效。
        16
    Keyes   93 天前
    @tankb52 因为别人把 FiddlerRoot 证书导入到可信证书列表中了

    你导入 Fiddler 证书的时候,不要让系统自动选择存储区域,点手动选择,然后指定到受信任的根证书颁发机构
        17
    lazyfighter   93 天前
    貌似需要导入 fiddler 的根证书才行
        18
    tankb52   93 天前
    @Keyes #16
    导入后需要重启系统吗?我从 firefox 中导出 amazon.com 的证书到本地,然后双击安装,选择指定到了受信任的根证书颁发机构。
    但是重新运行脚本还是报错。
        19
    huyinjie   93 天前
    可以尝试下用这个软件重置下网络 https://www.rizonesoft.com/downloads/complete-internet-repair/
        20
    Keyes   93 天前
    @tankb52 导 Fiddler 的证书,不是 Amazon 的

    fiddler ca 可能在不信任的列表中,把它移到信任里也可以
        21
    ThirdFlame   93 天前
    难道设置了全局代理到 fiddle ?
        22
    tankb52   93 天前 via Android
    @Keyes
    @ThirdFlame

    公司的网络应该是统一走 fiddle 的,但是只有我的电脑出问题就很奇怪了。

    我明天再去看看
        23
    ThirdFlame   93 天前
    @tankb52 那就是你没有信任 fiddle 的证书问题而已。
        24
    lusi1990   93 天前
    原来是走了 fiddler, 你需要的是 fiddler 的证书
    resp = requests.get('https://ipinfo.io/json', verify='fiddler.cer',proxies=proxy)
        25
    tankb52   93 天前
    @ThirdFlame #23
    @lusi1990 #24
    请问如何做呢?
    本地没有 fiddler.cer 。
    我执行后错误如下
    OSError: Could not find a suitable TLS CA certificate bundle, invalid path: fiddler.cer
        26
    lusi1990   93 天前   ♥ 1
    @tankb52 这个是你们公司提供给你了, 名字可能不叫这个, fiddler 证书的默认名字应该是 "FiddlerRoot.cer", verify 是证书 "FiddlerRoot.cer" 的路径
        27
    tankb52   93 天前
    @lusi1990 #26
    好的,多谢了。
    我去想办法,不行再找公司 IT.
        28
    foxyier   92 天前
    把抓包工具关了再试一下呢。。
        29
    tankb52   92 天前 via Android
    @foxyier
    公司层级的,不是我电脑上的
        30
    foxyier   91 天前
    @tankb52 你都说了你同事电脑都没问题。那就肯定是你电脑的问题啊。。为啥问题是公司层级呢? 公司层级的话不是都应该有问题么
        31
    tankb52   91 天前 via Android
    @foxyier
    我的意思是说抓包工具是公司层级上部署的,我关不掉。

    至于我电脑上确实是出问题,只是我找不到原因。
        32
    dapan24678   23 天前
    @warcraft1236 老哥 666,确实 本机开代理会影响 ssl 验证
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3589 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 42ms · UTC 05:13 · PVG 13:13 · LAX 21:13 · JFK 00:13
    ♥ Do have faith in what you're doing.