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 Exception as e: return ("text/error",["error\n", str(e)]) header = fp.readline() header = header.decode("UTF-8").strip() if header[0:1] == "2": return (header[3:], fp) return ("text/error", [header]) def _gethostname(url): return url.split('/')[2] if __name__ == "__main__": (mime, fp) = GeminiProtocol.get("gemini://gemini.zachdecook.com/") print(mime) print(fp)