forked from artyom-beilis/cppcms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhttpclient.py
More file actions
113 lines (100 loc) · 3.15 KB
/
httpclient.py
File metadata and controls
113 lines (100 loc) · 3.15 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env python
# coding=UTF-8
# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
from __future__ import print_function
try:
import httplib
except:
import http.client as httplib
class Cookie:
def __init__(self,content=''):
self.max_age = None
self.domain = None
self.path = None
self.name = ''
self.value = ''
secure = False
values=content.split(';')
self.name = values[0].strip().split('=')[0]
self.value = values[0].strip().split('=')[1]
for vin in values[1:]:
v=vin.strip();
vals = v.split('=')
parname = vals[0].lower()
if parname=='domain':
self.domain=vals[1]
elif parname == 'path':
self.path=vals[1]
elif parname == 'max-age':
self.max_age = vals[1]
def __str__(self):
s=self.pair()
if self.domain:
s+='; Domain=' + self.domain
if self.path:
s+='; Path='+self.path
if self.max_age:
s+='; Max-Age='+self.max_age
return s
def pair(self):
return self.name + '=' + self.value
def parse_cookies(response):
cookies=[]
hdr = response.getheader('set-cookie')
if hdr:
vals = hdr.split(',')
for val in vals:
cookies.append(Cookie(val))
cm={}
for c in cookies:
cm[c.name]=c
return cm
class Session:
api = 'http'
def __init__(self,print_cookies = True):
self.state={}
self.received={}
self.print_cookies = print_cookies
def getcookies(self):
allcookies=''
for key,value in self.state.items():
if allcookies == '':
allcookies = value.pair()
else:
allcookies+= '; ' + value.pair()
return allcookies
def transmit(self,url,post_data=None,content_type='application/x-www-form-urlencoded',headers={}):
#print("URL :",url)
#print("HDR :",headers)
#print("POST:",post_data)
received={}
conn=httplib.HTTPConnection('127.0.0.1',8080)
headers['Cookie']=self.getcookies()
if post_data:
headers['Content-Type']=content_type
conn.request('POST','/test'+url,post_data,headers)
else:
conn.request('GET','/test' + url,None,headers)
r=conn.getresponse()
self.status = r.status
content = r.read();
self.received=parse_cookies(r)
self.update_state()
#print("GOT :",content)
return content
def update_state(self):
if self.print_cookies:
print("Got following cookies")
for name,cookie in self.received.items():
if self.print_cookies:
print(cookie)
if name in self.state:
if cookie.max_age=='0':
del self.state[name]
else:
self.state[name] = cookie
else:
if cookie.max_age != '0':
self.state[name] = cookie
if self.print_cookies:
print("---------------------")