From 259946e39ff7382a84a432a300c92d0f3744f12d Mon Sep 17 00:00:00 2001 From: Zach DeCook Date: Fri, 23 Dec 2022 19:08:28 -0500 Subject: Browsing: Actually browse gemini! --- protocol/gemini.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 protocol/gemini.py (limited to 'protocol') diff --git a/protocol/gemini.py b/protocol/gemini.py new file mode 100644 index 0000000..c55e523 --- /dev/null +++ b/protocol/gemini.py @@ -0,0 +1,29 @@ +import socket +import ssl + +class GeminiProtocol(): + def get(url): + hostname = _gethostname(url) + try: + s = socket.create_connection((hostname, 1965),timeout=2) + context = ssl.SSLContext() + context.check_hostname = False + context.verify_mode = ssl.CERT_NONE + s = context.wrap_socket(s, server_hostname = hostname) + s.sendall((url + '\r\n').encode("UTF-8")) + fp = s.makefile("rb") + except: + return ("error",["error"]) + header = fp.readline() + header = header.decode("UTF-8").strip() + if header[0:1] == "2": + return (header[3:], fp) + return ("error", [header]) + +def _gethostname(url): + return url.split('/')[2] + +if __name__ == "__main__": + (mime, fp) = GeminiProtocol.get("gemini://gemini.zachdecook.com/") + print(mime) + print(fp) -- cgit 1.4.1