SORU
9 Mart 2010, Salı


Python urllib2 Basic Auth Sorunu

Güncelleme: çok basit bir komut için benim kod yoğunlaşmasına ve komut satırından çalıştırmak için karar verdim Lee'nin yorum:

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)

Ne yazık ki hala Authorization başlık (Nano başına) üretmek değil :(

Bir sorun urllib2 üzerinden temel KİMLİK doğrulaması Gönderen yaşıyorum. this article, baktım ve de onu takip ettiler. Benim kod:

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()

Nano ile Telin üzerine şunları görüyorum:

GET /v1/user HTTP/1.1
Host: api.foursquare.com
Connection: close
Accept-Encoding: gzip
User-Agent: Python-urllib/2.5 

Yetki curl ile bir istek gönderdiğim zaman, vs gönderilmez görebilirsiniz: 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: */*

Nedense benim kod doğrulama göndermek için görünüyor - herkes neyi kaçırdığımı gördün mü?

teşekkürler

-simon

CEVAP
2 HAZİRAN 2010, ÇARŞAMBA


Sorun Python kütüphaneleri, HTTP Standardı, ilk kimliği doğrulanmamış bir istek göndermek için, o zaman eğer bir 401 deneme ile cevap ise sadece kimlik bilgileri doğru gönderilen olabilir. Eğer Oturaklı sunucuları "standart kimlik doğrulama" sonra kitaplıkları işe yaramaz. tamamen yok olursa ...

Başlıkları kimlik doğrulaması yapmak için kullanmayı deneyin:

import urllib2, base64

request = urllib2.Request("http://api.foursquare.com/v1/user")
# You need the replace to handle encodestring adding a trailing newline 
# (https://docs.python.org/2/library/base64.html#base64.encodestring)
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)   
result = urllib2.urlopen(request)

Seninle aynı sorunu vardı ve bu konuya çözüm buldu: http://forums.shopify.com/categories/9/posts/27662

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jared Busch

    Jared Busch

    25 Mayıs 2011
  • TomSka

    TomSka

    30 Mayıs 2006
  • VideoGamePervert

    VideoGamePer

    30 AĞUSTOS 2008