urllib2 "HTTPError: HTTP Error 400: Bad Request"

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
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

Folgender Code funktioniert mit fast jeder url, auch bei einer extra erstellten test Seite wird der Post request erfolgreich ausgeführt, nur bei der im Code angegeben url kommt der Fehler "HTTPError: HTTP Error 400: Bad Request":

Code: Alles auswählen

import cookielib
import urllib2
import urllib
def login():
	cookies = cookielib.CookieJar()
	opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
	opener.addheaders =[('User-agent', ('Mozilla/5.0 (compatible; MSIE 6.0; ''Windows NT 5.2; .NET CLR 1.1.4322)'))]
	values={'login':'ah1103.krause.ce','pass':'passw'}
	data=urllib.urlencode(values)
	res=opener.open('http://flb-herford.de/sp.html',data)
login()
kann mir jemand sagen woran der Fehler liegt? :K

ceddy
Zuletzt geändert von ceddy am Mittwoch 8. Mai 2013, 08:52, insgesamt 1-mal geändert.
av_jui
User
Beiträge: 25
Registriert: Samstag 4. Mai 2013, 12:45

Hi

Ich weiß zwar nicht ob das nur ein Übertragungsfehler ist aber da

Code: Alles auswählen

values={'login':'ah1103.krause.ce','pass':passw'}
fehlt ein ' bei passw

Code: Alles auswählen

values={'login':'ah1103.krause.ce','pass':'passw'}
mfg
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

Tschuldigung, habs verbessert, aber es lag auch nur daran dass ich das richtige Password natürlich gelöscht habe.:)
BlackJack

@ceddy: Wo willst Du Dich denn da überhaupt anmelden? Interessant wäre es das Anmeldeformular mal im Quelltext betrachten zu können.
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

Das ist der online Stundenplan von meiner Schule.

Das Formular findet man unter: http://flb-herford.de/stupla.html

Code: Alles auswählen

<form action="sp.html" method="post">
<div class="loginstupla">
  <label for="user">Login</label> 
  <input type="text" name="login" id="ctrl_5" class="text" value="">
  <label for="pass">Passwort</label> 
  <input type="password" name="pass" id="ctrl_6" class="text" value=""> 
  <input type="checkbox" name="version" value="1" class="check">Plan für nächste Woche<br>
  <input type="hidden" name="REQUEST_TOKEN" value="a74cbc48c35b4101fa4a522d6d35db9d">
  <input type="submit" id="ctrl_6_submit" class="submit" value="Login">
</div>
</form>
Aber an sich sollte es ja nicht an den übertragenen Daten liegen, wenn die falsch sind sollte die Website diese ja einfach ignorieren
mcdwerner
User
Beiträge: 113
Registriert: Donnerstag 7. Juli 2011, 14:27

@ceddy das formular enthält ein "REQUEST_TOKEN" das wird vermutlich bei jedem request individuell generiert und wenn das bei der Anmeldung nicht dabei ist, wird der anmeldeversuch wahrscheinlich abgelehnt.
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

Nein, ich habe in einem anderen Versusch den request-token mit bottle Ausgelesn, das ändert auch nichts. :(
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

Code: Alles auswählen

import urllib
import httplib2
from bs4 import BeautifulSoup
http = httplib2.Http()

Get the request token
url = 'http://www.flb-herford.de/stupla.html'   
headers = {'Content-type': 'application/x-www-form-urlencoded'}
response, content=http.request(url)
headers = {'Cookie': response['set-cookie']}
s=BeautifulSoup(content)
tag = s.find(attrs={"name":"REQUEST_TOKEN"})

data = {"login":"ah1103.krause.ce", "pass":"passw","REQUEST_TOKEN":tag['value']}
resp, content = http.request("http://flb-herford.de/sp.html", "POST", urllib.urlencode(data))
print content
Hier habe ich das ganze mit der httplib2 versucht und vorher den request-token ausgelesen, allerdings werden hier beim "POST" die Daten nicht übertragen. Mal davon abgesehen würde ich das ganze sowieso lieber mit der urllib2 machen, das diese ja in python enthalten ist.
Antworten