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)
|
---|