Toplama: SSL: http://en.wikipedia.org için CERTIFICATE_VERIFY_FAILED hatası


113

'Python ile Web Kazıma' kodunun alıştırması yapıyorum ve şu sertifika sorununu yaşıyorum:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
import re

pages = set()
def getLinks(pageUrl):
    global pages
    html = urlopen("http://en.wikipedia.org"+pageUrl)
    bsObj = BeautifulSoup(html)
    for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):
        if 'href' in link.attrs:
            if link.attrs['href'] not in pages:
                #We have encountered a new page
                newPage = link.attrs['href'] 
                print(newPage) 
                pages.add(newPage) 
                getLinks(newPage)
getLinks("")

Hata şudur:

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1319, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1049)>

Btw, ben de beceriksizce pratik yapıyordum, ancak sorunu almaya devam ettim: komut bulunamadı: hurda (Her türlü çözümü çevrimiçi denedim ama hiçbiri işe yaramadı ... gerçekten sinir bozucu)


1
urllib.error.URLError: <urlopen hatası [SSL: CERTIFICATE_VERIFY_FAILED] sertifika doğrulaması başarısız oldu: yerel yayıncı sertifikası alınamıyor (_ssl.c: 1049)>
Catherine4j

1
ve ... lütfen bana bu hatanın arkasındaki nedeni söyleyin, gerçekten bilmek istiyorum ~~ teşekkürler !!
Catherine4j

1
Orada CERTIFICATE_VERIFY_FAILED: SSL 529 varolan sorular sonra yakın bu yinelenen olarak çözüm, lütfen figür hangi.
smci


Ve bariz olanı yorumlamak üzereydim: http yerine https ile eriştiniz mi?
smci

Yanıtlar:


392

Bir zamanlar bu sorunla karşılaştım. MacOS kullanıyorsanız Macintosh HD> Uygulamalar> Python3.6 klasörüne gidin (veya kullandığınız python sürümlerinden biri)> "Install Certificates.command" dosyasını çift tıklayın. : D


5
oh, Mac'imde bu Install Certificates.command dosyasına sahip değilim ... nedenini bilmiyorum TAT
Catherine4j

20
Python'u Homebrew kullanarak kurarsanız, bu dosya mevcut değildir. Çözüm burada: stackoverflow.com/a/44649450/412896
Sampo

3
Lütfen birisi bunu çözen cevap olarak işaretleyin. Bu kadar sıkışmış haldeyken bana çok zaman ve emek kazandırdın !!
Mark Puchala II

3
Windows 10 için bunu nasıl yapabilirim? Böyle bir dosya yok.
Aakash Basu

4
Efsanevi cevap
Nico

34

doğrulanmamış ssl kullanmak için bunu kodunuza ekleyebilirsiniz:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

1
bu iyidir çünkü eklemem gereken tek şey iki satır kodsa neden sistem değişiklikleri yapmalıyım?
Nagri

1
bu cevap muhtemelen bu kodun, kullanıcının verileri kazandıktan sonra onunla ne yaptığına bağlı olarak büyük güvenlik endişelerine yol açabileceğini belirtmelidir ..
Michael Altfield

kesinlikle doğrulanmamış sertifika kullandığınızda risk altındasınız. ve bu kod satırı yalnızca veri kaynağının ne olduğunu biliyorsanız ve üretim modu için varsayılan olarak ayarlamak uygun değilse işe yarar. soru, doğrulanmamış bir sayfanın nasıl taranacağıyla ilgili, bu kod en azından bu durum için büyük bir güvenlik endişesi oluşturmayacak.
Rambod

1
bu harika çalıştı! Tesekkurler dostum!
Rodrigo Serzedello

30

Bunu çözmek için:

Tek yapmanız gereken Python sertifikalarını yüklemek! MacOS'ta yaygın bir sorun.

Şu dosyaları açın:

Install Certificates.command
Update Shell Profile.command

Basitçe bu iki komut dosyasını çalıştırın ve artık bu sorunu yaşamayacaksınız.

Bu yardımcı olur umarım!


8
Uygulama Direktörümde bir Python dizini görmüyorum .. Anaconda kullanıyorum ve daha önce python 2.7 yüklediğim için python 3.6 için yeni bir ortam yarattım (ki bu da görünüşe göre Uygulamalar Direktörümde bir klasör oluşturmadı!). ..
Kai

1
bunların nereden kaçması gerekiyor?
baxx

1
@Azim: Ubuntu'ya ne dersiniz?
Betty


16

Acemi kullanıcılar için Uygulamalar klasörüne gidebilir ve Python 3.7 klasörünü genişletebilirsiniz. Şimdi önce Install Certificates.com komutunu çalıştırın (veya çift tıklayın) ve ardından Update Shell Profile.com komutunu çalıştırın.

görüntü açıklamasını buraya girin


5

Benim için iki adım çalıştı: - Macintosh HD> Uygulamalar> Python3.7 klasörüne gidin - "Install Certificates.command" seçeneğini tıklayın


4

Bu gönderiye bir göz atın, Python'un sonraki sürümleri için sertifikalar önceden yüklenmemiş ve bu hataya neden oluyor gibi görünüyor. Certifi paketini yüklemek için aşağıdaki komutu çalıştırabilmeniz gerekir:/Applications/Python\ 3.6/Install\ Certificates.command

Gönderi 1: urllib ve "SSL: CERTIFICATE_VERIFY_FAILED" Hatası

Gönderi 2: Airbrake hatası: urlopen hatası [SSL: CERTIFICATE_VERIFY_FAILED] sertifika doğrulanamadı: yerel yayıncı sertifikası alınamıyor


4

Anaconda kullanan herkes için certifipaketi kurarsınız, daha fazlasını görmek için:

https://anaconda.org/anaconda/certifi

Yüklemek için terminalinize bu satırı yazın:

conda install -c anaconda certifi

Bende de bu sorun var. Bir ortam oluşturamıyorum. Miniconda3 (macOS) yükledim ve sertifikanın ('conda list') yüklendiğini görüyorum ..
Kai

3

Bu çözümü bulabilirim ve iyi çalışıyor:

cd /Applications/Python\ 3.7/
./Install\ Certificates.command

2

Maalesef sorunu çözmedim. ancak kodların çalışmasını sağlamayı başardım (neredeyse tüm kodlarımda bu sorun var) yerel yayıncı sertifikası sorunu python3.7 altında gerçekleşiyor, bu yüzden python2.7 QAQ'ya döndüm ve "urllib2'den içe aktarma urlopeni" dahil olmak üzere tüm gerekenler "urllib.request import urlopen" yerine çok üzücü ...


2

Mac'te çalışıyorsanız Install Certificates.command, spot ışığında arayabilir ve enter tuşuna basabilirsiniz.


0

İstek kitaplığını kullanın. Bu çözümü deneyin veya https://URL'den önce ekleyin :

import requests
from bs4 import BeautifulSoup
import re

pages = set()
def getLinks(pageUrl):
    global pages
    html = requests.get("http://en.wikipedia.org"+pageUrl, verify=False).text
    bsObj = BeautifulSoup(html)
    for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):
        if 'href' in link.attrs:
            if link.attrs['href'] not in pages:
                #We have encountered a new page
                newPage = link.attrs['href']
                print(newPage)
                pages.add(newPage)
                getLinks(newPage)
getLinks("")

Bunun sizin için işe yarayıp yaramadığını kontrol edin


0

Stack Overflow'daki tüm uzmanlara kıyasla görece bir acemiyim.

2 Jupyter dizüstü bilgisayar sürümü çalışıyorum (biri yeni Anaconda Navigator kurulumundan ve diğeri ile ????). Sanırım bunun nedeni Anaconda'nın Mac'imde yerel bir kurulum olarak kurulmuş olması (Anaconda talimatlarına göre).

Zaten python 3.7 kurdum. Bundan sonra, jupyter not defterimi açmak için terminalimi kullandım ve Mac'ime global olarak başka bir sürüm koyduğunu düşünüyorum.

Ancak emin değilim çünkü sadece deneme yanılma yoluyla öğreniyorum!

Terminal komutunu yaptım:

conda install -c anaconda certifi 

(yukarıda belirtildiği gibi, ancak işe yaramadı.)

Python 3.7, OS Catalina10.15.3'e şurada yüklendi:

  • /Library/Python/3.7/site-packages VE
  • ~ / Kitaplık / Python / 3.7 / lib / python / site paketleri

Sertifika şu adrestedir:

  • ~ / Library / Python / 3.7 / lib / python / site-paketleri / certifi-2019.11.28.dist-info

Install Certificate.com komutunu bulmaya çalıştım ... ancak dosya yapılarına bakarak bulamadım ... Uygulamalar'da değil ... yukarıdaki bağlantılarda değil.

Sonunda Spotlight aracılığıyla bularak kurdum (yukarıda birinin önerdiği gibi). Ve otomatik olarak çift tıkladı ve aşağıdakilerle aynı klasöre ANOTHER sertifika kurdu:

  • ~ / Kitaplık / Python / 3.7 / lib / python / site paketleri /

Yukarıdakilerin hiçbiri benim için bir şey çözmedi ... Hala aynı hatayı alıyorum.

Bu yüzden sorunu şu şekilde çözdüm:

  1. Jupyter defterimi kapatıyorum.
  2. Anaconda Navigator açılıyor.
  3. Jupyter not defterini Navigator GUI üzerinden açma (Terminal yerine).
  4. defterimi açıp kodu çalıştırıyorum.

Bunun neden işe yaradığını size anlatamam. Ama benim için sorunu çözdü.

Bir dahaki sefere birini güçlükten kurtarmak istiyorum. Birisi benim neden işe yaradığını söyleyebilirse, bu harika olur.

Problem olduğunu bildiğim jupyter notebook'un 2 versiyonu olduğu için diğer terminal komutlarını denemedim. Bunu nasıl düzelteceğimi bilmiyorum.


0

Benim için sorun REQUESTS_CA_BUNDLEbenim.bash_profile

/Users/westonagreene/.bash_profile:
...
export REQUESTS_CA_BUNDLE=/usr/local/etc/openssl/cert.pem
...

REQUESTS_CA_BUNDLEBoş bıraktıktan sonra (yani, kaldırıldı .bash_profile), requeststekrar çalıştı.

export REQUESTS_CA_BUNDLE=""

Sorun yalnızca python requestsbir CLI (Komut Satırı Arayüzü) aracılığıyla çalıştırılırken ortaya çıktı . Eğer koşarsam requests.get(URL, CERT)sorun çözüldü.

Mac OS Catalina (10.15.6). 3.6.11 Pyenv Aldığım hata mesajı:[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

Cevabım başka yerde: https://stackoverflow.com/a/64151964/4420657



-1

Bu çalışacak. PYTHONHTTPSVERIFY ortam değişkenini 0 olarak ayarlayın.

  • Linux komutunu yazarak:
export PYTHONHTTPSVERIFY = 0

VEYA

  • Python kodunda kullanmak:
import os
os.environ["PYTHONHTTPSVERIFY"] = "0"

-3

Benim için çalışan tek çözüm:

Xcode uygulamasını silin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.