Seite 1 von 1

(Leicht) Http POST request

Verfasst: Donnerstag 12. März 2009, 22:14
von Lunarstorm
Hallo,

weil Python mir relativ neu ist und ich es neben C++ lerne habe ich mich hier mal angemeldet.

Es geht um folgendes Problem:
Ich habe mit urlib2 ClientCookie und vielen anderen versucht ein C++ Programm von mir in Python nachzuprogrammieren, was sich auf einer Website über post/get-Befehle anmeldet und Formulare ausfüllt.

Mit den Get-Befehlen klappt es super, aber sobald ein Post Befehl dazukommt (im Parameter "Data" steht etwas) wird dieser zwar gesendet, aber die cookies fehlen auf einmal im request :oops:

Hier der Code:

Code: Alles auswählen

import urllib
import urllib2

values = {'user' : 'Lunarstorm',  'pass' : 'geheim'}
testdata = {'submit' : 'data'}

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)

# Login
request = urllib2.Request("http://localhost/index.php?action=login",urllib.urlencode(values))
response = urllib2.urlopen(request)

# Funktioniert wunderbar, cookies werden gesendet
response = urllib2.urlopen("http://localhost/query.php?menu=2BA")

# Funktioniert nicht, cookies werden nicht gesendet
request = urllib2.Request("http://localhost/submitdata.php",urllib.urlencode(testdata))
response = urllib2.urlopen(request)

# Funktioniert wieder, cookies werden gesendet
response = urllib2.urlopen("http://localhost/query.php?menu=2BA")
Wenn ich es mit ClientCookie mache kommt genau das gleiche Problem und es liegt auch nicht daran, dass es localhost ist, denn es funktioniert auch mit meinem webspace nicht.

Für Hilfe wäre ich unendlich Dankbar.

Gruß
Lunarstorm

PS: Dass es fehlt finde ich mit einem Packet Monitor herraus

Verfasst: Donnerstag 12. März 2009, 22:25
von nemomuk
Schau dir mal mechanize oder auch Selenium an.

Verfasst: Donnerstag 12. März 2009, 22:28
von Lunarstorm
SchneiderWeisse hat geschrieben:Schau dir mal mechanize oder auch Selenium an.
Ich habe alle urllib2's mal mit 'mechanize' ersetzt, bekomme aber genau den gleichen Fehler. Das liegt wahrscheinlich daran, dass mechanize auf urllib2 basiert oder so :(

Edit: Hier der mechanize code:

Code: Alles auswählen

import urllib
import mechanize

values = {'user' : 'Lunarstorm',  'pass' : 'geheim'}
testdata = {'submit' : 'data'}

# Login
request = mechanize.Request("http://localhost/index.php?action=login",urllib.urlencode(values))
response = mechanize.urlopen(request)

# Funktioniert wunderbar, cookies werden gesendet
response = mechanize.urlopen("http://localhost/query.php?menu=2BA")

# Funktioniert nicht, cookies werden nicht gesendet
request = mechanize.Request("http://localhost/submitdata.php",urllib.urlencode(testdata))
response = mechanize.urlopen(request)

# Funktioniert wieder, cookies werden gesendet
response = mechanize.urlopen("http://localhost/query.php?menu=2BA")  
Wie gesagt, genau das gleiche Problem. Bei dem zweiten Post request werden keine cookies mitgesendet und der request wird deshalb vom server abgelehnt mit einem session id error.

Verfasst: Donnerstag 12. März 2009, 23:04
von crackpod_
Schau dir mal besser die Browser() Klasse im mechanize Modul an, damit solltest du weiterkommen.

Verfasst: Freitag 13. März 2009, 10:06
von Leonidas
Lunarstorm hat geschrieben:Ich habe alle urllib2's mal mit 'mechanize' ersetzt, bekomme aber genau den gleichen Fehler. Das liegt wahrscheinlich daran, dass mechanize auf urllib2 basiert oder so :(
Weil das auch was ganz anderes ist?! Ich kann ja auch nicht erwarten, dass wenn ich in ein Flugzeug einsteige dort ein Lenkrad ist, nur weil ein Flugzeug unter anderem auch Räder hat.

Du wirst wohl nicht drumrum kommen die Dokumentation zu lesen.

Verfasst: Freitag 13. März 2009, 14:40
von Lunarstorm
Hat sich alles gegessen. Danke euch allen mit mechanize funktioniert es wunderbar.