我正在尝试从此服务器下载天气数据: https://goldsmr4.sci.gsfc.nasa.gov/opendap/MERRA2/M2T1NXSLV.5.12.4/
我想使用这里发布的脚本: 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
非常欢迎任何帮助!感谢。
答案 0 :(得分: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