urllib.urlencode() Problem?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
jui
User
Beiträge: 6
Registriert: Freitag 10. März 2006, 18:19

Hi!

Code: Alles auswählen

import urllib

url = 'http%3A%2F%2Fton7.tonline.apa.net%2Fhome%2Fstart.php%3F%26s%3D5a5891a5defc43b84e04032a3852f49b%26domain_from%3Dwww.teamchef.at%26s%3D5a5891a5defc43b84e04032a3852f49b'
print url

print urllib.urlencode([('wdygt', url)])
Warum macht urllib.urlencode() aus jedem '%' im String ein '%25'?
Kann ich das irgendwie ausschalten, bzw. warum modifiziert urlencode den String auf diese Weise?

Ich benutze Python 2.5.1 auf XP.

lg Jui
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Weil urlencode die Daten noch quotet, mach vorher ein urllib.unquote(url) dann sollte es stimmen.

Gruss
jui
User
Beiträge: 6
Registriert: Freitag 10. März 2006, 18:19

rayo hat geschrieben:Hi

Weil urlencode die Daten noch quotet, mach vorher ein urllib.unquote(url) dann sollte es stimmen.

Gruss
jo wenn manns nacher macht stimmts wieder.
Wenn ich einfach url.replace('%25', '%') geht es ebenfalls.

Aber was bringt diese 'quoten' und warum wird aus ein '%' ein '%25' das wäre interressant?
BlackJack

In URLs dürfen nur bestimmte Zeichen vorkommen und andere nicht. Zum Beispiel sind Leerzeichen verboten. Um trotzdem alle Zeichen in einer URL unterbringen zu können kann man sie auch als Hexadezimalwert mit einem % davor angeben. Damit man auch ein % angeben kann muss man das natürlich ebenfalls auf diese Weise kodieren.

Code: Alles auswählen

In [68]: chr(int('25', 16))
Out[68]: '%'
jui
User
Beiträge: 6
Registriert: Freitag 10. März 2006, 18:19

BlackJack hat geschrieben:In URLs dürfen nur bestimmte Zeichen vorkommen und andere nicht. Zum Beispiel sind Leerzeichen verboten. Um trotzdem alle Zeichen in einer URL unterbringen zu können kann man sie auch als Hexadezimalwert mit einem % davor angeben. Damit man auch ein % angeben kann muss man das natürlich ebenfalls auf diese Weise kodieren.

Code: Alles auswählen

In [68]: chr(int('25', 16))
Out[68]: '%'
OK. Danke!
BlackJack

Wobei ich im Beispiel gerade sehe: Die URL ist ja bereits kodiert, bist Du sicher, dass Du das noch einmal machen willst!?
jui
User
Beiträge: 6
Registriert: Freitag 10. März 2006, 18:19

BlackJack hat geschrieben:Wobei ich im Beispiel gerade sehe: Die URL ist ja bereits kodiert, bist Du sicher, dass Du das noch einmal machen willst!?
Im richtigen Programm will ich noch mehr Parameter in die URL kodieren, nicht nur den einen wie im Beispiel.
Jetzt hab ich das "quoten" verstanden darum hab ich den Code jetzt angepasst.

Code: Alles auswählen

reqdata = urllib.urlencode([('xxx', 'xxx'),
                            ('xxx', 'xxx'),
                            ('wdygt', urllib.unquote(url[4][6:])),
                            ('submit.x', '0'),
                            ('submit.y', '0')])
Antworten