-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhttpClient.py
More file actions
71 lines (67 loc) · 1.79 KB
/
httpClient.py
File metadata and controls
71 lines (67 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import sys
import socket
def retrieve_url(url):
domain = url_split(url)
if domain is None:
return None
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((domain[0], domain[2]))
domain[0]=bytes(domain[0],'utf-8')
domain[1]=bytes(domain[1],'utf-8')
s.send(b"GET " + domain[1] +
b" HTTP/1.1\r\nHost:" + domain[0] +
b"\r\nConnection: close\r\n\r\n")
except socket.error:
return None
data_packets = []
while True:
data = None
try:
data = s.recv(4096)
if data:
data_packets+=[data]
continue
else:
break
except socket.error:
return None
data = b"".join(data_packets)
if data.find(b"200 OK") != -1:
new_data = data.split(b"\r\n\r\n", 1)
return new_data[1]
def url_split(url):
link=url
if "http://" in url:
link=link[7:]
if '/' in link:
link=link.split('/',1)
for i in range(len(link)-1):
i=i+1
link[i]='/'+link[i]
link+=[80]
return link
else:
link=link.split()
link+=['/']
link+=[80]
return link
elif "https://" in url:
link=link[8:]
if '/' in link:
link=link.split('/',1)
for i in range(len(link)-1):
i=i+1
link[i]='/'+link[i]
link+=[80]
return link
else:
link=link.split()
link+=['/']
link+=[80]
return link
else:
return None
if __name__ == "__main__":
# pylint: disable=no-member
sys.stdout.buffer.write(retrieve_url(sys.argv[1]))