2012-01-02 13 views
5

SUDS kullanmaya çalışıyorum ve neden işe kimlik doğrulaması yapamadığımı anlamaya çalışıyorum (veya https).Python SUDS SOAP isteği https hizmetine 401

Erişmeye çalıştığım hizmet, https üzerinden temel özet kimlik doğrulamasıdır. Hata ayıklamalarına dayanarak, https yerine http kullanılıyormuş gibi görünüyor. Ama ne eksik olduğumdan emin değilim. Herhangi bir ipucu takdir edilir.

from suds.client import Client 
from suds.transport.http import HttpAuthenticated 
import logging 
logging.basicConfig(level=logging.DEBUG) 
logging.getLogger('suds.client').setLevel(logging.DEBUG) 
logging.getLogger('suds.transport').setLevel(logging.DEBUG) 
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG) 
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG) 

def main(): 
    url = 'https://blah.com/soap/sp/Services?wsdl' 
    credentials = dict(username='xxxx', password='xxxx') 
    t = HttpAuthenticated(**credentials) 
    client = Client(url, location='https://blah.com/soap/sp/Services', transport=t) 
    print client.last_sent() 

if __name__=="__main__": 
    main() 

ayıklama Çıkış:

DEBUG:suds.wsdl:reading wsdl at: https://blah.com/soap/sp/Services?wsdl ... DEBUG:suds.transport.http:opening (https://blah.com/soap/sp/Services?wsdl)
snip ...
File "C:\Python27\Lib\site-packages\suds-0.4-py2.7\suds\reader.py", line 95, in download
fp = self.options.transport.open(Request(url))

File "C:\Python27\Lib\site-packages\suds-0.4-py2.7\suds\transport\http.py", line 173, in open
return HttpTransport.open(self, request)

File "C:\Python27\Lib\site-packages\suds-0.4-py2.7\suds\transport\http.py", line 64, in open
raise TransportError(str(e), e.code, e.fp)

suds.transport.TransportError: HTTP Error 401: Authorization Required

+0

İlk ... Sadece olmayacak 'Özet kimlik doğrulaması' olmalıdır 'kimlik temel sindiremez.' Auth türleri şunlardır: 'digest' ve 'basic.' Bu yüzden kafam karıştı. – user9303

cevap

6

Köpük iki HttpAuthenticated sınıfları, suds.transport.http modülünde bir ve suds.transport.https modülünde ikinci içerir. URL'niz https:// olduğundan, suds.transport.http'dan başladığınıza göre görünür, suds.transport.https.HttpAuthenticated'u denemek isteyebilirsiniz.

+0

+1. 'suds.transport.https.HttpAuthenticated', suds 'belgesinde değildi. Çözümünüz benim sorunumun cevabıydı. –

5

Bu probleme tökezledim ve bana uygun bir çözüm buldum. Sunucum NTLM kimlik doğrulaması kullanıyordu, bu yüzden suds ile çalışmak için documentation'daki "Windows (NTLM)" bölümünü takip etmeliydim.

İlk python-ntlm yükleyin ve ardından yazabilirsiniz: doğruluğundan

from suds.transport.https import WindowsHttpAuthenticated 
ntlm = WindowsHttpAuthenticated(username='xx', password='xx') 
client = Client(url, transport=ntlm)