end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

urllib.request for python による https で ERROR [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

ERROR [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed:
Hostname mismatch, certificate is not valid for 'ないしょ.co.jp'.
(_ssl.c:1076) https://ないしょ.co.jp

ssl証明書の有効期限切れやホスト名誤りで上記のようなエラーとなるらしい。

これを無視し、処理を進めるには、以下のように 「ssl.create_default_https_context = ssl.create_unverified_context」を追加すれば、OK。

#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import sys
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
import urllib.request


def main():
    req_url = "https://ないしょ.co.jp"
    req = urllib.request.Request(req_url)

    try:
        res = urllib.request.urlopen(req)
    except urllib.error.HTTPError as err:
        print("WARN",err.code, req_url,file=sys.stderr)
        return False
    except urllib.error.URLError as err:
        print("ERROR",err.reason, req_url,file=sys.stderr)
        return False

    print("DONE HTTP",err.code,req_url)


if __name__ == '__main__':
    main()