Python urllib2 Basic Auth Problem
Update: basierend auf Lee ' s Kommentar habe ich beschlossen, zu kondensieren mein code, um ein wirklich einfaches Skript, und führen Sie es von der Befehlszeile aus:
import urllib2
import sys
username = sys.argv[1]
password = sys.argv[2]
url = sys.argv[3]
print("calling %s with %s:%s\n" % (url, username, password))
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman)))
req = urllib2.Request(url)
f = urllib2.urlopen(req)
data = f.read()
print(data)
Leider noch nicht erzeugen die Authorization
- header (per Wireshark) 🙁
Ich habe ein problem mit versenden von basic AUTH über urllib2. Ich warf einen Blick auf dieser Artikelund folgten dem Beispiel. Mein code:
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, "api.foursquare.com", username, password)
urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman)))
req = urllib2.Request("http://api.foursquare.com/v1/user")
f = urllib2.urlopen(req)
data = f.read()
Sehe ich Folgendes auf den Draht über wireshark:
GET /v1/user HTTP/1.1
Host: api.foursquare.com
Connection: close
Accept-Encoding: gzip
User-Agent: Python-urllib/2.5
Können Sie sehen, die Berechtigung wird nicht gesendet, vs., wenn ich senden Sie eine Anfrage via curl: curl -u user:password http://api.foursquare.com/v1/user
GET /v1/user HTTP/1.1
Authorization: Basic =SNIP=
User-Agent: curl/7.19.4 (universal-apple-darwin10.0) libcurl/7.19.4 OpenSSL/0.9.8k zlib/1.2.3
Host: api.foursquare.com
Accept: */*
Für einige Grund mein code scheint nicht zu senden, die Authentifizierung jeder sehen, was ich bin fehlt?
Dank
-simon
InformationsquelleAutor der Frage Simon | 2010-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem könnte sein, dass die Python-Bibliotheken, pro HTTP-Standard, senden Sie zuerst eine nicht authentifizierte Anfrage, und auch nur dann, wenn es antwortete mit einem 401 wiederholen, sind die richtigen Anmeldeinformationen gesendet. Wenn Sie die Foursquare-Server nicht "Total standard-Authentifizierung", dann werden die Bibliotheken nicht funktionieren.
Versuchen mit Header zu tun Authentifizierung:
Hatte das gleiche problem wie du und fand die Lösung aus diesem thread: http://forums.shopify.com/categories/9/posts/27662
InformationsquelleAutor der Antwort yayitswei
(copy-paste/angepasst von https://stackoverflow.com/a/24048772/1733117).
Ersten Sie können eine Unterklasse
urllib2.BaseHandler
oderurllib2.HTTPBasicAuthHandler
und implementierenhttp_request
so, dass jede Anforderung hat Sie die passendeAuthorization
header.Dann, wenn Sie faul sind wie ich, installieren Sie die handler Global
InformationsquelleAutor der Antwort dnozay
Muss der zweite parameter eine URI, die nicht einen domain-Namen. also
InformationsquelleAutor der Antwort Lee
Hier ist, was ich verwenden, um mit einem ähnlichen problem, das ich gestoßen beim Versuch, den Zugang MailChimp API. Dieser tut das gleiche, nur schöner formatiert.
InformationsquelleAutor der Antwort Hayden Shelton
Ich würde vorschlagen, dass die aktuelle Lösung ist die Verwendung von mein Paket urllib2_prior_authdies löst ziemlich gut (ich arbeite auf Aufnahme der standard-lib.
InformationsquelleAutor der Antwort mcepl