1
2 '''
3 Send something by HTTP.
4
5 @author: Michael Eddington
6 @version: $Id: http.py 817 2008-03-26 22:31:40Z meddingt $
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 import time, urllib2
37 from Peach.publisher import Publisher
38
40 '''
41 A simple HTTP publisher.
42 '''
43
44 - def __init__(self, url, realm, username, password, headers = None, timeout = 0.1):
45 '''
46 @type host: string
47 @param host: Remote host
48 @type port: number
49 @param port: Remote port
50 @type timeout: number
51 @param timeout: How long to wait for reponse
52 '''
53 self._url = url
54 self._realm = realm
55 self._username = username
56 self._password = password
57 self._headers = headers
58 self._timeout = float(timeout)
59 self._fd = None
60
62 '''
63 Close connection if open.
64 '''
65 self.close()
66
69
74
75 - def send(self, data):
76 '''
77 Send data via sendall.
78
79 @type data: string
80 @param data: Data to send
81 '''
82
83 passmgr = urllib2.HTTPPasswordMgr()
84 passmgr.add_password(self._realm, self._url, self._username, self._password)
85
86 auth_handler = urllib2.HTTPDigestAuthHandler(passmgr)
87 opener = urllib2.build_opener(auth_handler)
88 urllib2.install_opener(opener)
89
90 req = urllib2.Request(self._url, data, self._headers)
91
92 try:
93 self._fd = urllib2.urlopen(req)
94 except:
95 self._fd = None
96
98 '''
99 Receive upto 10000 bytes of data.
100
101 @rtype: string
102 @return: received data.
103 '''
104 if self._fd:
105 if size != None:
106 return self._fd.read(size)
107
108 return self._fd.read()
109
110 else:
111 return ''
112
114 '''
115 A simple HTTP publisher.
116 '''
117
118 - def __init__(self, url, realm, username, password, headers = None, timeout = 0.1):
119 '''
120 @type host: string
121 @param host: Remote host
122 @type port: number
123 @param port: Remote port
124 @type timeout: number
125 @param timeout: How long to wait for reponse
126 '''
127 self._url = url
128 self._realm = realm
129 self._username = username
130 self._password = password
131 self._headers = headers
132 self._timeout = float(timeout)
133 self._fd = None
134
136 '''
137 Create connection.
138 '''
139 pass
140
143
145 '''
146 Close connection if open.
147 '''
148 if self._fd:
149 self._fd.close()
150 self._fd = None
151
152 - def send(self, data):
153 '''
154 Send data via sendall.
155
156 @type data: string
157 @param data: Data to send
158 '''
159
160 passmgr = urllib2.HTTPPasswordMgr()
161 passmgr.add_password(self._realm, self._url, self._username, self._password)
162
163 auth_handler = urllib2.HTTPBasicAuthHandler(passmgr)
164 opener = urllib2.build_opener(auth_handler)
165 urllib2.install_opener(opener)
166
167 req = urllib2.Request(self._url, data, self._headers)
168
169 try:
170 self._fd = urllib2.urlopen(req)
171 except:
172 self._fd = None
173
174
176 '''
177 Receive upto 10000 bytes of data.
178
179 @rtype: string
180 @return: received data.
181 '''
182 if self._fd:
183 if size != None:
184 return self._fd.read(size)
185
186 return self._fd.read()
187
188 else:
189 return ''
190
191
192