summaryrefslogtreecommitdiffstatshomepage
path: root/examples/network
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-04-28 21:39:17 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-04-28 21:39:17 +0300
commit8fcfaf6f220ca9645b4429d756b3646c298d6466 (patch)
treee31c6ab29a9375575d9391f9bc8e2cb61f4d127d /examples/network
parent978a429aaab21c7156f53924c7ba31c0da47fded (diff)
downloadmicropython-8fcfaf6f220ca9645b4429d756b3646c298d6466.tar.gz
micropython-8fcfaf6f220ca9645b4429d756b3646c298d6466.zip
examples/http_server_ssl.py: HTTPS server example.
Diffstat (limited to 'examples/network')
-rw-r--r--examples/network/http_server_ssl.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/examples/network/http_server_ssl.py b/examples/network/http_server_ssl.py
new file mode 100644
index 0000000000..2e430183d9
--- /dev/null
+++ b/examples/network/http_server_ssl.py
@@ -0,0 +1,59 @@
+try:
+ import usocket as socket
+except:
+ import socket
+import ussl as ssl
+
+
+CONTENT = b"""\
+HTTP/1.0 200 OK
+
+Hello #%d from MicroPython!
+"""
+
+def main(use_stream=True):
+ s = socket.socket()
+
+ # Binding to all interfaces - server will be accessible to other hosts!
+ ai = socket.getaddrinfo("0.0.0.0", 8443)
+ print("Bind address info:", ai)
+ addr = ai[0][4]
+
+ s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ s.bind(addr)
+ s.listen(5)
+ print("Listening, connect your browser to https://<this_host>:8443/")
+
+ counter = 0
+ while True:
+ res = s.accept()
+ client_s = res[0]
+ client_addr = res[1]
+ print("Client address:", client_addr)
+ print("Client socket:", client_s)
+ client_s = ssl.wrap_socket(client_s, server_side=True)
+ print(client_s)
+ print("Request:")
+ if use_stream:
+ # Both CPython and MicroPython SSLSocket objects support read() and
+ # write() methods.
+ # Browsers are prone to terminate SSL connection abruptly if they
+ # see unknown certificate, etc. We must continue in such case -
+ # next request they issue will likely be more well-behaving and
+ # will succeed.
+ try:
+ req = client_s.read(4096)
+ print(req)
+ if req:
+ client_s.write(CONTENT % counter)
+ except Exception as e:
+ print("Exception serving request:", e)
+ else:
+ print(client_s.recv(4096))
+ client_s.send(CONTENT % counter)
+ client_s.close()
+ counter += 1
+ print()
+
+
+main()