| 1 | #!/bin/python3
|
|---|
| 2 | import os
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 | def retrieve_url(url, *,
|
|---|
| 6 | check_certificates=True, timeout=60, error_status=True):
|
|---|
| 7 | from urllib.request import Request, urlopen
|
|---|
| 8 | request = Request(url, unverifiable=True)
|
|---|
| 9 | request.headers['Accept-encoding'] = 'identity'
|
|---|
| 10 | if check_certificates:
|
|---|
| 11 | ssl_context = None
|
|---|
| 12 | else:
|
|---|
| 13 | import ssl
|
|---|
| 14 | ssl_context = ssl.create_default_context()
|
|---|
| 15 | ssl_context.check_hostname = False
|
|---|
| 16 | ssl_context.verify_mode = ssl.CERT_NONE
|
|---|
| 17 | with urlopen(request, timeout=timeout, context=ssl_context) as response:
|
|---|
| 18 | print('Fetching %s' % request.get_full_url())
|
|---|
| 19 | content_length = response.headers['Content-Length']
|
|---|
| 20 | if content_length is not None:
|
|---|
| 21 | content_length = int(content_length)
|
|---|
| 22 | data = response.read()
|
|---|
| 23 | if content_length is not None and len(data) != content_length:
|
|---|
| 24 | from urllib.request import URLError
|
|---|
| 25 | raise URLError(
|
|---|
| 26 | f'Got {len(data)} bytes when {content_length} were expected')
|
|---|
| 27 | print('Fetched %s' % request.get_full_url())
|
|---|
| 28 |
|
|---|
| 29 |
|
|---|
| 30 | if 1:
|
|---|
| 31 | import certifi
|
|---|
| 32 | os.environ["SSL_CERT_FILE"] = certifi.where()
|
|---|
| 33 | url = "https://files.wwpdb.org/pub/pdb/refdata/chem_comp/P/NAP/NAP.cif"
|
|---|
| 34 | print("Try without checking certificates")
|
|---|
| 35 | retrieve_url(url, check_certificates=False)
|
|---|
| 36 | print("Try with checking certificates")
|
|---|
| 37 | retrieve_url(url)
|
|---|