urllib.urlencode() Problem?

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

urllib.urlencode() Problem?

Beitragvon jui » Mittwoch 15. August 2007, 17:46

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:

Beitragvon rayo » Mittwoch 15. August 2007, 18:27

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

Beitragvon jui » Mittwoch 15. August 2007, 19:01

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

Beitragvon BlackJack » Mittwoch 15. August 2007, 19:58

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

Beitragvon jui » Donnerstag 16. August 2007, 22:00

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

Beitragvon BlackJack » Freitag 17. August 2007, 08:13

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

Beitragvon jui » Freitag 17. August 2007, 12:29

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')])

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder