urllib, chain args fehler? [solved]

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Hi

Ja ich schon wieder ^^

Ich hab ein kleines Script erstellt das Zeilen aus einer Datei liest und diese dann per urllib in einen Link fügt und aufruft.
Somit schreibt das Ding für mich :)

Das Problem ist aber, sobald eine Zeile ein Leerzeichen hat wie z.B. "Guten Tag" bekomm ich folgende Fehlermeldung (siehe unten).

Gibts da ne möglichkeit Python zu sagen das er das Leerzeichen ignoriren soll?

Im normalen Browser kappts ja auch.
Traceback (most recent call last):
File "/home/angelus/Projekte/Python/v0.9.py", line 17, in <module>
import engine
File "/home/angelus/Projekte/Python/v0.9/engine.py", line 79, in <module>
text.reader(data[0], data[1], data[2])
File "/home/angelus/Projekte/Python/v0.9/text.py", line 42, in reader
response = urlopen(url).read()
File "/usr/lib64/python2.5/urllib2.py", line 121, in urlopen
return _opener.open(url, data)
File "/usr/lib64/python2.5/urllib2.py", line 380, in open
response = meth(req, response)
File "/usr/lib64/python2.5/urllib2.py", line 491, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib64/python2.5/urllib2.py", line 418, in error
return self._call_chain(*args)
File "/usr/lib64/python2.5/urllib2.py", line 353, in _call_chain
result = func(*args)
File "/usr/lib64/python2.5/urllib2.py", line 499, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 400: Bad Request

Code: Alles auswählen

    if start == 'Y' or start == 'y':
        i = 0
        while i < loops:
            x = 0
            while x < lines:
                read = openpath.readline()
                text = read[:-1]
                print text
                url = 'http://chat%s.fidion.de/schreibe.php?http_host=%s&id=%s&schreibe.php&text2=%s&aktion=Go!' % (chat, domain, sessionid, text)
                print url
                response = urlopen(url).read()
                print response
                time.sleep(timeout)
                x += 1
            else:
                openpath.seek(0)
            i += 1
        else:
            exiturl = urlopen(('http://chat%s.fidion.de/index.php?http_host=%s&id=%s&aktion=logoff') % (chat, domain, sessionid)).read()
            print 'File reading done!'       
    else:
        print 'Have a nice day.'
Zuletzt geändert von root_tux_linux am Freitag 28. Dezember 2007, 02:30, insgesamt 1-mal geändert.
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64
AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686
### Sorry for my bad english ###
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

root_tux_linux hat geschrieben:Das Problem ist aber, sobald eine Zeile ein Leerzeichen hat wie z.B. "Guten Tag" bekomm ich folgende Fehlermeldung (siehe unten).

Gibts da ne möglichkeit Python zu sagen das er das Leerzeichen ignoriren soll?
Naja, Leerzeichen kannst du ersetzen mit ``'Guten Tag'.replace(' ', '')`` oder enkodieren (ist nur die Frage was am Schluss rauskommen soll).

Oder du nutzt ein richtiges Chatprotokoll wie Jabber oder IRC ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Leonidas hat geschrieben:
root_tux_linux hat geschrieben:Das Problem ist aber, sobald eine Zeile ein Leerzeichen hat wie z.B. "Guten Tag" bekomm ich folgende Fehlermeldung (siehe unten).

Gibts da ne möglichkeit Python zu sagen das er das Leerzeichen ignoriren soll?
Naja, Leerzeichen kannst du ersetzen mit ``'Guten Tag'.replace(' ', '')`` oder enkodieren (ist nur die Frage was am Schluss rauskommen soll).

Oder du nutzt ein richtiges Chatprotokoll wie Jabber oder IRC ;)

text.replace(' ', '') dann wärs ja nimmer Guten Tag sondern GutenTag :(

Muss doch was anderes geben? ^^
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64
AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686
### Sorry for my bad english ###
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Ich habs lol


\%20 und dann macht er ein leerzeichen lol


danke trotzdem :)
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64
AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686
### Sorry for my bad english ###
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und jetzt testest du mal was passiert, wenn du ein "%", ein "&" oder ein "=" senden willst ;-)

Leonidas hat dir mit "encodieren" doch schon das entscheidende Suchwort geliefert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

root_tux_linux hat geschrieben:text.replace(' ', '') dann wärs ja nimmer Guten Tag sondern GutenTag :(
Klar, aber du hast ja ignorieren geschrieben und wenn man etwas ignoriert, dann ist es nicht da.

%20 ist das Leerzeichen URL-Kodiert. Als Tipp für dich: die Stdlib hat schon etwas, was beliebige Strings so enkodieren kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

Naja dann hab ich mich falsch ausgedrückt :(

Trotzdem danke :)
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64
AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686
### Sorry for my bad english ###
Antworten