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.

War es hilfreich?

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:

http://docs.python.org/library/urllib2.html#examples

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top