例外の中身から、文字列検索を行う方法が知りたいです。
def check_ssl_certification(targetURL, waitsec_from=1, waitsec_to=3): err_msg = {} headers = { "User-Agent": ( "Mozilla/5.0 (X11; Linux x86_64; rv:57.0)" "Gecko/20100101 Firefox/57.0" ) } session = requests.Session() try: # print('ok') response = session.get( url=targetURL, headers=headers, stream=True, timeout=(20.0, 30.0) ) except ssl.SSLError: print("SSL認証エラー") except ssl.CertificateError as e: print("エラー", e) except requests.exceptions.ConnectTimeout: print("タイムアウトしました。") err_msg["connection_timeout"] = "ホストへの接続に失敗しました。" except requests.exceptions.ConnectionError as e: print("ホストが見つかりませんでした(https)", e) err_msg["no_host"] = "ホストが見つかりませんでした。" return response # HTTP ステータスコードが 4xx と 5xx の場合は urllib.error.HTTPError 例外が投げられる except requests.exceptions.HTTPError as e: print(e.response.status_code) except requests.exceptions.ReadTimeout as e: print("requests.exceptions.ReadTimeoutエラー : ", e) except requests.exceptions.TooManyRedirects as e: print("エラー: ", e) else: print("レスポンスステータス: ", response.status_code) # sys.exit() s = randint(waitsec_from, waitsec_to) sleep(s) msg_headder = "random sleep " + str(s) + "sec" print( str(datetime.datetime.now()) + "," + msg_headder + "," + response.url, file=codecs.open("requests.log", "a", "utf-8"), ) # print('response.raise_for_status()' ,response.raise_for_status()) return response return err_msg
具体的には、上記コードにおきまして、except requests.exceptions.ConnectionError as e:
こちらの例外が捕捉された際に、print("ホストが見つかりませんでした(https)", e)
を行うと以下のように出力されるのですが、Caused by SSLError
からSSLErrorであるかを判定するために、print("SSLError" in e.__context__)
としたのですが、TypeError: argument of type 'MaxRetryError' is not iterable
となってしまい、検索を行うことが出来ない状況です。
HTTPSConnectionPool(host='test.php.xdomain.jp', port=443): Max retries exceeded with url: /website/login.php (Caused by SSLError(CertificateError("hostname 'test.php.xdomain.jp' doesn't match either of '*.php.xdomain.ne.jp', 'php.xdomain.ne.jp'",),))
こちらの問題を解決する方法がありましたら、ご助頂けましたら幸いです。
よろしくお願いします
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/29 00:47