Trennen von CGI-Rückgabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

Montag 26. März 2012, 20:13

Hallo Leute!
Warscheinlich bin ich einfach nur zu blöde dafür, aber ich versuche gerade eine CGI-Cookie-Rückgabe "zu entschlüsseln".
Ich habe bereits im Internet gesucht, habe aber nicht gefunden. :(

Hier also der Rückgabewert:

Code: Alles auswählen

a d _ s _ i d _ 1 = 9 4 3 4 9 8 2 8 2 8 ; a d _ s _ i d _ 2 = 1 6 4 9 4 3 6 9 0 4 
Ich bräuchte also nur die beiden Werte in einzelnen Variablen. (was heißt hier "nur"??)

Viele Grüße und vielen Dank schon einmal!
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Montag 26. März 2012, 20:30

Bitteschön:

Code: Alles auswählen

s = "a d _ s _ i d _ 1 = 9 4 3 4 9 8 2 8 2 8 ; a d _ s _ i d _ 2 = 1 6 4 9 4 3 6 9 0 4"
print {k: v for k, v in (p.split("=") for p in s[::2].split(";"))}
(Terse-Man sagt: Ja, das geht auch mit weniger list- und dict-comprehension-Magie, aber wo ist da der Spaß ;)

Stefan
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

Montag 26. März 2012, 20:38

Ersteinmal Danke für die schnelle Antwort!
Leider krieg ich ne Fehlermeldung zurück, wenn ich deinen Tipp in mein Programm eingebaut hab :(

Code: Alles auswählen

Traceback (most recent call last):
  File "/srv/www/cgi-bin/prog/admin/logout.cgi", line 25, in <module>
    print {k: v for k, v in (p.split("=") for p in cookie[::2].split(";"))}
  File "/srv/www/cgi-bin/prog/admin/logout.cgi", line 25, in <dictcomp>
    print {k: v for k, v in (p.split("=") for p in cookie[::2].split(";"))}
ValueError: need more than 1 value to unpack
Hier der vollständige Code:

Code: Alles auswählen

#!/usr/bin/env python

import os, cgi, cgitb; cgitb.enable()
cookie = os.environ["HTTP_COOKIE"]
print("Set-Cookie: ad_s_id_1=None")
print("Set-Cookie: ad_s_id_2=None")

print("Content-Type: text/html\n")

try:
   datei = open("./top_anmelden.txt", "r")
   top = datei.read()
   datei.close()
except Exception as FM:
   print("Es trat ein Fehler auf:<br><br>{0}".format(str(FM)))


print(str(top))


print("""
Sie wurden ausgeloggt.
""")
#s = "a d _ s _ i d _ 1 = 9 4 3 4 9 8 2 8 2 8 ; a d _ s _ i d _ 2 = 1 6 4 9 4 3 6 9 0 4"
print {k: v for k, v in (p.split("=") for p in cookie[::2].split(";"))}
Nochmals viieelen Dank für deinen Tipp! :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Montag 26. März 2012, 20:40

Wie wäre es mit `urlparse.parse_qs`? Darauf wird auch in der Doku zu `cgi` verwiesen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

Montag 26. März 2012, 20:42

Hyperion hat geschrieben:Wie wäre es mit `urlparse.parse_qs`? Darauf wird auch in der Doku zu `cgi` verwiesen.
tut mir leid; da kann ich Dir jetzt leider nicht folgen :(
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Montag 26. März 2012, 20:47

Lies Dir es doch in der Doku nach; im `cgi`-Modul unter "Functions". Dort wird auf das `urlparse`-Modul verwiesen.

Hier mal ein Beispiel:

Code: Alles auswählen

In [6]: import urlparse

n [7]: s = "a d _ s _ i d _ 1 = 9 4 3 4 9 8 2 8 2 8 ; a d _ s _ i d _ 2 = 1 6 4 9 4 3 6 9 0 4 "

In [8]: urlparse.parse_qs(s)
Out[8]: 
{' a d _ s _ i d _ 2 ': [' 1 6 4 9 4 3 6 9 0 4 '],
 'a d _ s _ i d _ 1 ': [' 9 4 3 4 9 8 2 8 2 8 ']}
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

Montag 26. März 2012, 20:54

Perfekt.
Viieelen Dank!!! :D
Antworten