HTTPS melden Sie sich mit urllib2
-
20-08-2019 - |
Frage
Im Moment habe ich ein kleines Skript, das eine Webseite herunterlädt und extrahiert einige Daten, die ich interessiert bin. Nichts Besonderes.
Zur Zeit bin ich die Download-Seite wie folgt:
import commands
command = 'wget --output-document=- --quiet --http-user=USER --http-password=PASSWORD https://www.example.ca/page.aspx'
status, text = commands.getstatusoutput(command)
Das funktioniert zwar einwandfrei, dachte ich, es Sinn machen würde, die Abhängigkeit von wget zu entfernen. Ich dachte, es trivial sein sollte, die oben auf urllib2 zu konvertieren, aber so weit ich habe null Erfolg hatte. Das Internet ist voll urllib2 Beispiele, aber ich habe nichts gefunden, dass mein Bedürfnis nach einfachen Benutzername und Passwort HTTP-Authentifizierung mit einem HTTPS-Server übereinstimmt.
Lösung
Die Anfragen Modul HTTP / HTTPS-Funktionen über eine moderne API zur Verfügung stellen.
import requests
url = 'https://www.someserver.com/toplevelurl/somepage.htm'
res = requests.get(url, auth=('USER', 'PASSWORD'))
status = res.status_code
text = res.text
Andere Tipps
diese sagt, sollte es einfach sein,
[as] solange Ihr lokaler Python hat SSL-Unterstützung.
Wenn Sie nur HTTP-Basic-Authentifizierung verwenden, müssen Sie verschiedene Handler gesetzt, wie beschrieben hier .
Am Beispiel gibt:
import urllib2
theurl = 'http://www.someserver.com/toplevelurl/somepage.htm'
username = 'johnny'
password = 'XXXXXX'
# a great password
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
# this creates a password manager
passman.add_password(None, theurl, username, password)
# because we have put None at the start it will always
# use this username/password combination for urls
# for which `theurl` is a super-url
authhandler = urllib2.HTTPBasicAuthHandler(passman)
# create the AuthHandler
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
# All calls to urllib2.urlopen will now use our handler
# Make sure not to include the protocol in with the URL, or
# HTTPPasswordMgrWithDefaultRealm will be very confused.
# You must (of course) use it when fetching the page though.
pagehandle = urllib2.urlopen(theurl)
# authentication is now handled automatically for us
Wenn Sie Digest tun, werden Sie einige zusätzliche Header gesetzt haben, aber sie sind gleich, unabhängig von SSL-Nutzung. Google für Python + urllib2 + http + verdauen.
Cheers,
Die urllib2 Dokumentation hat ein Beispiel mit Standardauthentifizierung arbeiten: