f36975b679
CPython only supports the server_hostname keyword arg via the SSLContext object, so use that instead of the top-level ssl.wrap_socket. This allows the test to run on CPython the same as uPy. Also add the "Host:" header to correctly make a GET request (for URLs that are hosted on other servers). This is not strictly needed to test the SSL connection but helps to debug things when printing the response.
60 lines
1.2 KiB
Python
60 lines
1.2 KiB
Python
try:
|
|
import usocket as _socket
|
|
except:
|
|
import _socket
|
|
try:
|
|
import ussl as ssl
|
|
except:
|
|
import ssl
|
|
# CPython only supports server_hostname with SSLContext
|
|
ssl = ssl.SSLContext()
|
|
|
|
|
|
def test_one(site, opts):
|
|
ai = _socket.getaddrinfo(site, 443)
|
|
addr = ai[0][-1]
|
|
|
|
s = _socket.socket()
|
|
|
|
try:
|
|
s.connect(addr)
|
|
|
|
if "sni" in opts:
|
|
s = ssl.wrap_socket(s, server_hostname=opts["host"])
|
|
else:
|
|
s = ssl.wrap_socket(s)
|
|
|
|
s.write(b"GET / HTTP/1.0\r\nHost: %s\r\n\r\n" % bytes(site, 'latin'))
|
|
resp = s.read(4096)
|
|
# print(resp)
|
|
|
|
finally:
|
|
s.close()
|
|
|
|
|
|
SITES = [
|
|
"google.com",
|
|
"www.google.com",
|
|
"api.telegram.org",
|
|
{"host": "api.pushbullet.com", "sni": True},
|
|
# "w9rybpfril.execute-api.ap-southeast-2.amazonaws.com",
|
|
{"host": "w9rybpfril.execute-api.ap-southeast-2.amazonaws.com", "sni": True},
|
|
]
|
|
|
|
|
|
def main():
|
|
for site in SITES:
|
|
opts = {}
|
|
if isinstance(site, dict):
|
|
opts = site
|
|
site = opts["host"]
|
|
|
|
try:
|
|
test_one(site, opts)
|
|
print(site, "ok")
|
|
except Exception as e:
|
|
print(site, repr(e))
|
|
|
|
|
|
main()
|