39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
import socket
|
|
import ssl
|
|
import urllib.parse
|
|
|
|
# See https://tildegit.org/solderpunk/gemini-demo-1/src/branch/master/gemini-demo.py
|
|
|
|
class Request():
|
|
def __init__(self, url):
|
|
self.url = url
|
|
parsed_url = urllib.parse.urlparse(self.url)
|
|
if ":" in parsed_url.netloc:
|
|
self.hostname, self.port = parsed_url.netloc.split(":")
|
|
else:
|
|
self.hostname = parsed_url.netloc
|
|
self.port = 1965
|
|
|
|
def makeRequest(self):
|
|
try:
|
|
s = socket.create_connection((self.hostname, self.port))
|
|
context = ssl.SSLContext()
|
|
context.check_hostname = False
|
|
context.verify_mode = ssl.CERT_NONE
|
|
s = context.wrap_socket(s, server_hostname = self.hostname)
|
|
s.sendall((self.url + '\r\n').encode("UTF-8"))
|
|
fp = s.makefile("rb")
|
|
header = fp.readline().decode("UTF-8").strip()
|
|
status, mime = header.split()
|
|
|
|
print("STATUS : " + status)
|
|
print("MIME : " + mime)
|
|
|
|
body = fp.read().decode("UTF-8")
|
|
|
|
return body
|
|
|
|
except Exception as err:
|
|
print(err)
|
|
exit(1)
|