urllib und Post - Wie gehts?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
vogti
User
Beiträge: 31
Registriert: Mittwoch 21. Januar 2009, 21:53
Kontaktdaten:

Mittwoch 21. Januar 2009, 22:17

Hallo ihr Schlangenbeschwörer :)
Seit Montag schlage ich mich nun schon mit Python rum. Warum? Weils mir Spaß macht!

Bisher bin ich ganz gut mit den etlichen Tutorials klar gekommen und hab einiges gelernt. Jetzt möchte ich jedoch Daten an eine Website posten, die diese verlangt. Es handelt sich um username und password.

Ich habe herausgefunden, dass ich da mit urllib wohl ganz gut fahre - das downloaden von Dateien ohne Authentifizierung habe ich auch schon hinbekommen. Wie aber sende ich die Login-Daten an die Website? Bisher bin ich so weit:

Code: Alles auswählen

#! /usr/bin/python
# -*- coding: utf-8 -*-
import urllib

h = urllib.urlretrieve('http://twitter.com/statuses/update.xml','twitter.txt') #öffnen der Seite, Inhalt speichern in twitter.txt
twitter=open('twitter.txt','r')
inhalt = twitter.read()
print inhalt
twitter.close()
Generelle Frage noch zu urlretrieve. Irgendwo habe ich gelesen, dass ich damit die Daten auch ohne die Datei extra öffnen zu müssen lesen kann. Wie geht das, oder habe ich das falsch verstanden?

lg,
vogti
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Mittwoch 21. Januar 2009, 22:21

Mechanize ist dafür zuständig!
vogti
User
Beiträge: 31
Registriert: Mittwoch 21. Januar 2009, 21:53
Kontaktdaten:

Mittwoch 21. Januar 2009, 22:41

BlackVivi hat geschrieben:Mechanize ist dafür zuständig!
Bevor ich mich damit noch genauer befasse: Ist es mit urllib gar nicht möglich?

Edit: Gerade gefunden: [wiki]FAQ#WieLoggeIchMichAufEinerWebseiteEin][/wiki]
Zuletzt geändert von vogti am Mittwoch 21. Januar 2009, 23:23, insgesamt 2-mal geändert.
vogti
User
Beiträge: 31
Registriert: Mittwoch 21. Januar 2009, 21:53
Kontaktdaten:

Mittwoch 21. Januar 2009, 23:13

Ok, habe jetzt doch schonmal etwas rumgespielt und nachgelesen. Bin jedoch immernoch nicht sicher, ob ich Mechanize richtig benutze...
Mein Code:

Code: Alles auswählen

#! /usr/bin/python
# -*- coding: utf-8 -*-
from mechanize import Browser

br = Browser()
br.set_proxies({"http": "vogti1:Mariuri@twitter.com/statuses/update.xml"})

br.open('http://twitter.com/statuses/update.xml')

print br.title()
print response1.geturl()
print response1.info() #head
print response1.read() #body
response1.close()
Die Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/vogti/python/Dateiarbeit/teil4.py", line 8, in <module>
    br.open('http://twitter.com/statuses/update.xml')
  File "build/bdist.linux-i686/egg/mechanize/_mechanize.py", line 209, in open
    return self._mech_open(url, data, timeout=timeout)
  File "build/bdist.linux-i686/egg/mechanize/_mechanize.py", line 236, in _mech_open
    response = UserAgentBase.open(self, request, data)
  File "build/bdist.linux-i686/egg/mechanize/_opener.py", line 191, in open
    response = urlopen(self, req, data)
  File "/usr/lib/python2.5/urllib2.py", line 399, in _open
    '_open', req)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "build/bdist.linux-i686/egg/mechanize/_http.py", line 729, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "build/bdist.linux-i686/egg/mechanize/_http.py", line 706, in do_open
    raise URLError(err)
URLError: <urlopen error (-2, 'Name or service not known')>
Ich gehe einfach mal davon aus, dass ich Mechanize falsch benutze - installiert habe ich es via sudo python setup.py install

Any Ideas?
DasIch
User
Beiträge: 2480
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 21. Januar 2009, 23:18

Twitter hat eine API und noch viel toller ist dass dafür schon jemand ein Modul geschrieben hat.
lunar

Mittwoch 21. Januar 2009, 23:24

urllib arbeitet auf der Ebene des HTTP-Protokolls, versteht also nur die HTTP-Authentifizierungsverfahren. Von den darüber liegenden Schichten versteht es nichts. Daher kann urllib prinzipiell erstmal nichts mit Authentifizierungsverfahren anfangen, die auf HTML-Ebene ablaufen, also über Formulare.

Wenn du mit urllib arbeiten möchtest, musst du den entsprechenden HTTP-Request "manuell" zusammenbauen. Du musst dir also anschauen, welchen Header dein Browser bei der Anmeldung sendet, und diesen Header dann an urllib übergeben.
vogti
User
Beiträge: 31
Registriert: Mittwoch 21. Januar 2009, 21:53
Kontaktdaten:

Mittwoch 21. Januar 2009, 23:25

DasIch hat geschrieben:Twitter hat eine API und noch viel toller ist dass dafür schon jemand ein Modul geschrieben hat.
Ja, habe ich beides schon entdeckt. Aber wie ich bereits schrieb, bin ich Python Anfänger und möchte Probleme weitestgehend selber lösen (was mir bisher auch immer gelungen ist - außer diese Mechanize sache hier). Trotzdem danke für den Hinweis, war lieb gemeint.
Antworten