Seite 1 von 1
Trennen von CGI-Rückgabe
Verfasst: Montag 26. März 2012, 20:13
von akhof
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!
Re: Trennen von CGI-Rückgabe
Verfasst: Montag 26. März 2012, 20:30
von sma
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
Re: Trennen von CGI-Rückgabe
Verfasst: Montag 26. März 2012, 20:38
von akhof
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!

Re: Trennen von CGI-Rückgabe
Verfasst: Montag 26. März 2012, 20:40
von Hyperion
Wie wäre es mit `urlparse.parse_qs`? Darauf wird auch in der Doku zu `cgi` verwiesen.
Re: Trennen von CGI-Rückgabe
Verfasst: Montag 26. März 2012, 20:42
von akhof
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

Re: Trennen von CGI-Rückgabe
Verfasst: Montag 26. März 2012, 20:47
von Hyperion
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 ']}
Re: Trennen von CGI-Rückgabe
Verfasst: Montag 26. März 2012, 20:54
von akhof
Perfekt.
Viieelen Dank!!!
