ich bin relativ neu in der Python Welt und arbeite mich momentan noch etwas in die Syntax ein, daher hoffe ich, dass meine Frage nicht zu doof ist .
Mein Problem ist folgendes: Wir erstellen zurzeit einen Proxyserver, welcher Datei Downloads automatisch mitschneidet und die Metadaten, die in den Datein enthalten sind automatisch in eine Datenbank schreibt (also z.B. ID3 Tags bei MP3 Datein). Nach kurzem googlen habe ich auch einen funktionierenden Proxy gefunden. Mein Problem ist jetzt allerdings, wie ich auch die Daten in einem Stream zugreifen kann, ohne die Funktionalität des Streams zu beeinträchtigen.
Hier ist der entsprechende Code, der aufgerufen wird, wenn jemand auf eine Seite surft:
Code: Alles auswählen
def do_GET(self):
(scm, netloc, path, params, query, fragment) = urlparse.urlparse(
self.path, 'http')
if scm != 'http' or fragment or not netloc:
self.send_error(400, "bad url %s" % self.path)
return
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
if self._connect_to(netloc, soc):
self.log_request()
soc.send("%s %s %s\r\n" % (
self.command,
urlparse.urlunparse(('', '', path, params, query, '')),
self.request_version))
self.headers['Connection'] = 'close'
del self.headers['Proxy-Connection']
for key_val in self.headers.items():
soc.send("%s: %s\r\n" % key_val)
soc.send("\r\n")
self._read_write(soc)
finally:
print "\t" "bye"
soc.close()
self.connection.close()
Danke schonmal für die Hilfe.
Gruß,
iuiz
//edit:
Sorry, hab gerade gesehen, dass eine wichtige Methode fehlt:
Code: Alles auswählen
def _read_write(self, soc, max_idling=20):
iw = [self.connection, soc]
ow = []
count = 0
while 1:
count += 1
(ins, _, exs) = select.select(iw, ow, iw, 3)
if exs: break
if ins:
for i in ins:
if i is soc:
out = self.connection
else:
out = soc
data = i.recv(8192)
if data:
out.send(data)
count = 0
else:
print "\t" "idle", count
if count == max_idling: break