2017-01-17 3 views
0

Я пытаюсь загрузить данные о погоде с сервера: https://goldsmr4.sci.gsfc.nasa.gov/opendap/MERRA2/M2T1NXSLV.5.12.4/Отключить SSL аутентификации с помощью питона 3.5 и URLLIB

и я хотел бы использовать сценарий опубликован здесь: https://github.com/Open-Power-System-Data/weather_data/blob/master/opendap_download/multi_processing_download.py

Там, кажется, возникшей после действия сертификата SSL сертификата:

CertificateError: hostname 'goldsmr4.sci.gsfc.nasa.gov' doesn't match either of 
'*.gesdisc.eosdis.nasa.gov', 'gesdisc.eosdis.nasa.gov' 

Как отключить аутентификацию SSL?

Я думаю, мне придется изменить некоторые параметры здесь:

def __create_authenticated_sesseion(self): 
    s = requests.Session() 
    s.headers = { 
     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.85 Safari/537.36'} 
    s.auth = (self.__username, self.__password) 
    s.cookies = self.__authorize_cookies_with_urllib() 

или здесь:

def __authorize_cookies_with_urllib(self): 
    username = self.__username 
    password = self.__password 
    top_level_url = "https://urs.earthdata.nasa.gov" 


    # create an authorization handler 
    p = urllib.request.HTTPPasswordMgrWithDefaultRealm() 
    p.add_password(None, top_level_url, username, password); 

    auth_handler = urllib.request.HTTPBasicAuthHandler(p) 
    auth_cookie_jar = cookiejar.CookieJar() 
    cookie_jar = urllib.request.HTTPCookieProcessor(auth_cookie_jar) 
    opener = urllib.request.build_opener(auth_handler, cookie_jar) 

    urllib.request.install_opener(opener) 

или здесь:

def __download_and_save_file(self, url, file_path): 
    r = self._authenticated_session.get(url, stream=True) 
    with open(file_path, 'wb') as f: 
     for chunk in r.iter_content(chunk_size=1024): 
      if chunk: 
       f.write(chunk) 
    return r.status_code 

Любая помощь очень приветствуется! Благодарю.

+1

Возможный дубликат [Как отключить проверку сертификата безопасности в запросах в Python] (HTTP: // StackOverflow .com/questions/15445981/how-do-i-disable-the-security-certificate-check-in-python-запросы) –

+0

[Использовать 'verify = False'] (http://stackoverflow.com/questions/15445981/how-do-i-disable-the-security-certificate-check-in-python-запросы? noredirect = 1 & lq = 1) в методах запроса. – aneroid

ответ

0

Я решил проблему комбинируя эти два ответа: https://stackoverflow.com/a/33770290/7105351 отключить SSL аутентификации и https://stackoverflow.com/a/26236748/7105351, чтобы получить его в новичке.

теперь мой код выглядит следующим образом и работает:

def __authorize_cookies_with_urllib(self): 
    username = self.__username 
    password = self.__password 
    top_level_url = "https://urs.earthdata.nasa.gov" 

    #Create new ssl context 
    ctx = ssl.create_default_context() 
    ctx.check_hostname = False 
    ctx.verify_mode = ssl.CERT_NONE 
    httpsHandler = urllib.request.HTTPSHandler(context = ctx) 

    # create an authorization handler 
    p = urllib.request.HTTPPasswordMgrWithDefaultRealm() 
    p.add_password(None, top_level_url, username, password); 

    auth_handler = urllib.request.HTTPBasicAuthHandler(p) 
    auth_cookie_jar = cookiejar.CookieJar() 
    cookie_jar = urllib.request.HTTPCookieProcessor(auth_cookie_jar) 
    opener = urllib.request.build_opener(auth_handler, cookie_jar, httpsHandler) 

    urllib.request.install_opener(opener) 

и

def __download_and_save_file(self, url, file_path): 
    r = self._authenticated_session.get(url, stream=True, verify = False) 
    with open(file_path, 'wb') as f: 
     for chunk in r.iter_content(chunk_size=1024): 
      if chunk: 
       f.write(chunk) 
    return r.status_code