Hi,
ich hab hier ein verzwicktest "Problem" mit dem Tool reportbug aus
Debian. Das Ding prüft anhand von Website-Anfragen ob ein installiertes
Paket aktuell ist und ob irgendwelche Bugreports dazu existieren bevor
man einen neuen schreiben darf.
Weiterhin sitze ich hinter einem AFAIK transparenten Proxy (sprich ich
weiss eigentlich nicht das da einer ist) der offensichtlich etwas mehr
tut als nur HTTP Requests und Response "weiterzuleiten" und evtl. zu
cachen.
Folgendes Szenario: reportbug …
[View More]erzeugt einen HTTP Request mit unter
anderem folgenden Header:
'Accept-Encoding' : 'gzip;q=1.0, deflate;q=0.9, identity;q=0.5'
Die Debian-Server beantworten das ganze _immer_ mit einem
nicht-komprimierten Response. Allerdings interessiert das den Proxy
nicht, Anfragen dieser Art kommen komprimiert zurueck.
Nun zum eigentlichen Problem: Die Antwort ist ein Redirect-Response
(sorry HTTP Code ist mir grad entfallen) und mit folgendem:
handlers = [proxy_support,
urllib2.UnknownHandler, HttpWithGzipHandler,
urllib2.HTTPBasicAuthHandler(pwd_manager),
urllib2.ProxyBasicAuthHandler(pwd_manager),
urllib2.HTTPDigestAuthHandler(pwd_manager),
urllib2.ProxyDigestAuthHandler(pwd_manager),
urllib2.HTTPDefaultErrorHandler, urllib2.HTTPRedirectHandler,
]
if hasattr(httplib, 'HTTPS'):
handlers.append(HttpsWithGzipHandler)
_opener = urllib2.build_opener(*handlers)
urllib2.install_opener(_opener)
return _opener.open(req)
wird dann der urllib2.HTTPRedirectHandler "angeschmissen" und sendet
entsprechend einen neuen Request. Dieser neue Request hat aber nun kein
Accept-Encoding mehr gesetzt und demzufolge kommt die Antwort
unkomprimiert daher.
Meine Frage an euch ist erstmal nur: Ist das Verhalten vom
Redirect-Handler so korrekt, oder sollte er den originalen Request
erneut an die andere URL schicken und somit auch den Accept-Encoding
Header?
Das eigentliche Problem ist dann naemlich der HttpWithGzipHandler und
die Header des Response, der Handler sieht so aus:
class HttpWithGzipHandler (urllib2.HTTPHandler):
"support gzip encoding"
def http_open (self, req):
return decode(urllib2.HTTPHandler.http_open(self, req))
und decode beginnt so:
def decode (page):
"gunzip or deflate a compressed page"
encoding = page.info().get("Content-Encoding")
if encoding in ('gzip', 'x-gzip', 'deflate'):
Die Kodierung des Inhalts wird hier als gzip angegeben, aber in
wirklichkeit ist da reiner Text drin. Ich lasse mir in pythons
GzipFile._read_gzip_header() naemlich die ersten 2 Bytes ausgeben und
das sind nicht die 2 magic-bytes fuer gzip, sondern normaler Text.
Saemtliche Ideen wie ich dem ganzen auf die Schliche komme oder es
"repariere" sind willkommen. Wer den kompletten Source-Code von
reportbug sehen will ziehe sich bitte:
http://ftp.de.debian.org/debian/pool/main/r/reportbug/reportbug_3.20.tar.gz
Die Dateien urlutils.py und checkversions.py (Funktion
get_versions_available) enthalten die wesentlichen Teile.
Andreas
PS: Nein ich will nicht das ihr das fuer mich debuggt, nur Tipps wie ich
da am besten rangehe... Der Maintainer des Pakets kann das ganze
natuerlich nicht reproduzieren da kein transparenter Proxy im Weg ist..
--
Today is the last day of your life so far.
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de
[View Less]
=========================
Leipzig Python User Group
=========================
Stammtisch am 09.05.2006
-------------------------
Wir treffen uns am 09.05.2006 um 20:00 Uhr wieder im
im Schulungszentrum der Python Academy in Leipzig
(http://www.python-academy.de/Schulungszentrum/anfahrt.html).
Diesmal wird Ralf Muschall über die Anwendung von
Tkinter, der Bibliothek für grafische
Nutzeroberflächen, die in der
Standard-Python-Installation enthalten ist, sprechen.
Für das leibliche Wohl …
[View More]wird gesorgt.
Wir bitten um kurze Anmeldung per e-mail an: info(a)python-academy.de
An den Treffen der Python Anwendergruppe kann
jeder teilnehmen, der Interesse an Python hat,
die Sprache bereits nutzt oder nutzen möchte.
Die Arbeitssprachen des Treffens ist Deutsch.
Englisch sprechende Python-Enthusiasten sind
trotzdem herzlich eingeladen. Wir übersetzen gern.
Aktuelle Informationen zu den Treffen sind immer unter
http://www.python-academy.de/User-Group/index.html
zu finden.
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de
[View Less]
Hallo,
Wir sind ein kleines, junges und sehr dynamisches Unternehmen und
machen spannende Projekte für Kunden, die hauptsächlich aus
Deutschland kommen. Dafür suchen wir einen Python-Programmierer, der
für uns zunächst eine ganz bestimmte Lösung mit klaren Anforderungen
umsetzt, gegen vorher vereinbarten Festpreis. Zielplattform ist Linux
(in erster Linie Debian, z.T. auch Gentoo). Wenn alles stimmt und man
sich gut versteht, reden wir danach sehr gern über eine Festanstellung
im Raum Berlin.
…
[View More]Wir bieten dabei flexible Arbeitszeiten, gute technische Austattung,
angemessene Bezahlung, ein junges und nettes Team.
Wir suchen einen Programmierer, der selbständig ist, aber auch für
Teamarbeit zu gebrauchen sein muss, der einen hohen Qualitätsanspruch
an seine eigenen Lösungen hat und sich von spannenden Projekten
begeistern lässt.
Wenn jemand interesse hat, bitte mailen. Details werden dann Peer2Peer geklärt.
Grüsse,
Alex
_______________________________________________
python-de maillist - python-de(a)python.net
http://python.net/mailman/listinfo/python-de
[View Less]