ローカルにファイルをダウンロードするためにurllib.request.urlretrieveを使用しています。
urllib.request.urlretrieve(url_string,file_name)
エラーが発生します:
ssl.CertificateErrorはユーザーコードによって処理されませんでしたメッセージ:ホスト名 'foo.net'は 'a248.e.akamai.net'、 '。akamaihd.net'、 '。akamaihd-のいずれとも一致しませんstaging.net '、' 。akamaized.net '、'。akamaized-staging.net '
URLをChromeにコピーすると、通知が表示され、「URLに移動し続ける」などのように言う必要があります。
使用する - urllib.request.urlopen
with custom ssl context :
import ssl
import urllib.request
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
with urllib.request.urlopen(url_string, context=ctx) as u, \
open(file_name, 'wb') as f:
f.write(u.read())
または、 requests
library を使用すると、より簡単になる可能性があります。
import requests
with open(file_name, 'wb') as f:
resp = requests.get(url_string, verify=False)
f.write(resp.content)
関数_urllib.request.urlretrieve
_はSSLオプションを受け入れませんが、_urllib.request.urlopen
_は受け入れます。
ただし、代わりにssl.create_default_context()
を使用して安全なSSLコンテキストを作成し、それを安全でないようにする場合は、ssl.SSLContext()
を使用して安全でないコンテキストを作成できます。
この:
_ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
_
以下と同等です。
_ctx = ssl.SSLContext()
_
(For Python <3.5.3 use ssl.SSLContext(ssl.PROTOCOL_TLSv1)
)
これにより、ニースワンライナーが作成されます。
_import ssl
import urllib.request
with urllib.request.urlopen("https://wrong.Host.badssl.com/", context=ssl.SSLContext()) as url:
print(url.read())
_