2017-08-05 16 views
0

Webアプリケーションが複数のURLを要求し、SSL証明書のエラーが発生することがあります。彼らはすべてのサードパーティのURLですので、私はそのエラーを修正することはできませんし、それらをログに記録したくないです。それにもかかわらず、何かがそれ自身でこれを記録しています:2017-08-05 00:22:49,496 ERROR -- : Certificate did not match expected hostname: www.improving-autonomy.org. Certificate: {'subjectAltName': [('DNS', '*.wordpress.com'), ('DNS', 'wordpress.com')], 'subject': ((('commonName', u'*.wordpress.com'),),)}誰でも私はそれを止めることができますか?私のコードは以下の通りです。事前に多くの感謝!'証明書が期待されたホスト名と一致しませんでした'というログを記録しないエラーメッセージ

UPDATED
try : 
    ua = UserAgent() 
    headers = {'Content-Type' : 'text/html', 'Accept-Encoding' : None, 'User-Agent' : ua.random} 
    response = requests.get(url, headers=headers, timeout=10) 
except ssl.CertificateError as e : 
    pass 

- : それは要求モジュールのログを(connection.py)のように見えます。私がすでに同じ例外を捕まえているのであれば、なぜロギングを続けるのですか?

def _match_hostname(cert, asserted_hostname): 
    try: 
     match_hostname(cert, asserted_hostname) 
    except CertificateError as e: 
     log.error(
      'Certificate did not match expected hostname: %s. ' 
      'Certificate: %s', asserted_hostname, cert 
     ) 
    # Add cert to exception and reraise so client code can inspect 
    # the cert when catching the exception, if they want to 
    e._peer_cert = cert 
    raise 
+0

デバッガをトレースして、実際にログが記録されている場所を確認しましたか?おそらく、エラーのチェックがあり、エラーが検出され、ログが作成され、例外が発生したようです。しかし、コードをトレースすることで検証する必要があります。 – idjaw

+0

これはリクエストモジュールで発生しています。 connection.pyファイル –

+0

アイデア?私はすでに同じ例外をキャッチしています。とにかくそれ自身でログを記録するのはなぜですか? –

答えて

2

と同じ例外が発生しますが、表示されないのはです。ここではが発生しています。さんがここで何が起こっているかのスニペットを見てみましょう:だから

except CertificateError as e: 
    log.error(
     'Certificate did not match expected hostname: %s. ' 
     'Certificate: %s', asserted_hostname, cert 
    ) 
# Add cert to exception and reraise so client code can inspect 
# the cert when catching the exception, if they want to 
e._peer_cert = cert 
raise 

、例外が最初に発生したときに、そのコードがCertificateErrorをキャッチし、それがlog.errorになり、あたりに、属性として証明書を割り当て、コード内にコメントがあれば、raiseへの呼び出しが行われます。空raise呼び出しが今はあなたがキャッチしているものであることをCertificateError例外、およびあるリレイズ最後に行われた例外、しようとしていること

。したがって、ログコードはすでにそのコードによって作成されており、例外のキャッチはから呼び出され、が呼び出されます。

+0

私は見ています...そして、この最初のログを避けるにはどうしますか? –

+1

私は信じているモジュールのログレベルで遊ぶことができます。 [this](https://stackoverflow.com/questions/11029717/how-do-i-disable-log-messages-from-the-requests-library)をご覧ください。 – idjaw

+0

私はここに作業コードを書く: 'logging.getLogger(" requests.packages.urllib3 ")。setLevel(logging.CRITICAL)' –

0

あなたは例外をキャッチし、それがタイプだ印刷することができます。その後は動くはずです、あなたのコードでは、この特定の例外タイプを使用し

except Exception as exc: 
    print exc, exc.message, exc.__class__ 

。また、exceptステートメントの後にelse句を追加して、そこにロギングコードを置くこともできます。このコードは、tryブロックが正常に実行された場合にのみ実行されます。

+0

で更新しました。リクエストモジュールが「CertificateError」をキャッチしてログに記録します –

関連する問題