2016-06-03 9 views
0

Ich habe viele Beiträge im Internet gelesen, aber keiner von ihnen scheint für mich zu arbeiten. Ich habe eine Web-Formular, die einen Benutzernamen und ein Passwort ein, um sich anzumelden benötigt. Hier ist ein Code-Snippet unter denen ichPOST mit Python funktioniert nicht

params = urllib.parse.urlencode({'login' : 'user', 'password' : 'pwd'}) 
f = urllib.request.urlopen("https://example.com/login.php?%s" % params) 
print(f.read().decode('utf-8')) 

bisher versucht aber es gibt mir die Login-Seite Quelle zurück, anstatt die " Benutzer-Panel ", die nach der Anmeldung erscheint. Wenn ich https:/example.com/login.php?login=user&password=pwd in der URL-Leiste des Browsers schreibe, meldet es mich an. Das Ziel ist es, die Seite Quelle, die erscheint nach Anmeldung (die" Benutzer-Panel "). Kann mir bitte jemand helfen?

Verwendung von Python 3.5

+0

vielleicht –

+2

Sie machen einen 'GET' Anfrage anstelle einer' Post' die Anmeldung leitet Sie nur an den Benutzer-Panel nach dem Login oder vielleicht fehlen einige Header auf den Antrag. – shiva

+0

Tun Sie sich einen Gefallen und verwenden Sie Anfragen, http://docs.python-requests.org/en/master/user/quickstart/ –

Antwort

1

Die korrekte Verwendung ist

f = urllib.request.urlopen("https://example.com/login.php", data=params) 

Von urllib.request documentation:

Daten zusätzliche Daten spezifiziert eine Zeichenfolge sein kann an den Server zu schicken, oder None wenn Solche Daten werden nicht benötigt.

Beachten Sie, dass dies eine POST Anfrage anstelle von GET sendet. Wenn Sie senden GET Anfrage haben , können Sie einfach wie folgt vor:

f = urllib.request.urlopen("https://example.com/login.php?user={0}&password={1}".format('user', 'pwd')) 
+0

Leider bekomme ich immer noch die Login-Seite auch auf diese Weise zurück (es fragt mich nach einem Array von Bytes, also musste ich 'data = params.encode (" utf-8 ")' stattdessen) schreiben –

+0

@LucaMozzo Die Seite könnte erfordern eine "GET" Anfrage. Hast du die zweite Methode versucht? – Selcuk

+0

Der HTML-Code sagt "method = post", aber ich habe es gerade ausprobiert und noch nichts! –

1

Nach the documentation for urllib, müssen Sie Keyword-Argument übergeben data (oder das zweite Positions Argument) zu urlopen, anstatt sie Hinzufügen auf die uRL:

import urllib 
params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) 
f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params) 
print f.read()