uri parsen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Volvic
User
Beiträge: 30
Registriert: Donnerstag 14. Juni 2007, 05:18

uri parsen

Beitragvon Volvic » Samstag 11. August 2007, 04:44

hallo,

ich möchte folgende uri parsen:

http://example.com/download?file=test.tar.gz&sid=123456


nun mit RegEx ist das zwar machbar, jedoch habe ich damit noch viele probleme. gibt es dafür nichts fertiges, z.b. beim urlparse modul ist was von parametern beschrieben worden?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Samstag 11. August 2007, 04:57

Wie möchtest du die URL denn geparst haben? Willst du den Querystring geparst haben? Oder willst du Protokol, Domain, Pfad und Query?
Volvic
User
Beiträge: 30
Registriert: Donnerstag 14. Juni 2007, 05:18

Beitragvon Volvic » Samstag 11. August 2007, 06:23

momentan benötige ich nur den query teil. soweit war ich mit urlparse allerdings auch schon:

>>> import urlparse
>>> u = urlparse.urlparse('http://example.com/download?file=test.tar.gz&sid=14789632')
>>> u
('http', 'example.com', '/download', '', 'file=test.tar.gz&sid=14789632', '')
>>>


also beim ersten ? wird es entfernt, soweit okay, nur wollte ich eben die query angaben später in einem dict speichern zum weiterverarbeiten des requests also aus:

http://example.com/download?file=test.tar.gz&sid=14789632


soll das werden:

Code: Alles auswählen

query_vars = {
  'file' : 'test.tar.gz',
  'sid' : '14789632'
}
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Samstag 11. August 2007, 07:18

Frei aus dem Kopf tippe ich darauf, dass ``cgi.parse_qs`` deine Anforderung erfüllt.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Samstag 11. August 2007, 07:29

Ungetestet, aber so wird es angewendet:

Code: Alles auswählen

query_vars = []
for key, values in cgi.parse_qs(query_string, True).iteritems():
    for value in values:
        value = value.decode('utf-8', 'ignore')
        query_vars.append(key, value)


Und schon hast du den Query in einer Dictionary ähnlichen Struktur.

Beachte, das ``value.decode`` irgentwie anders mit dem Charset umgeht bzw. Konfigurierbar ist.

Für einen besseren Zugriff könnte sich noch eine Art "MultiDict" erweisen. Ein Beispiel, legt Werkzeug mal vor: http://trac.pocoo.org/browser/werkzeug/ ... ils.py#L24

Ansonsten hängt das natürlich klar vom Anwendungsgebiet ab.


MfG EnTeQuAk
Volvic
User
Beiträge: 30
Registriert: Donnerstag 14. Juni 2007, 05:18

Beitragvon Volvic » Samstag 11. August 2007, 08:51

perfekt danke, dann kann ich meine regex weglassen :)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder