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! :D

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!!! :D