2012-01-02 38 views
5

Tôi đang cố gắng sử dụng SUDS và đang cố gắng tìm ra lý do tại sao tôi không thể xác thực để hoạt động (hoặc https).Python SUDS SOAP yêu cầu dịch vụ https 401

Dịch vụ tôi đang cố gắng truy cập vượt quá https với xác thực thông báo cơ bản. Dựa trên các lỗi, nó dường như đang sử dụng http thay vì https. Nhưng không thực sự chắc chắn những gì tôi đang mất tích. Bất kỳ đầu mối nào được đánh giá cao.

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

gỡ lỗi Output:

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

đầu tiên cho tính đúng đắn ... Nên chỉ là 'tiêu hóa xác thực' không 'cơ bản tiêu hóa xác thực.' Các loại auth là: 'digest' và 'basic'. Vì vậy, tôi đã bối rối. – user9303

Trả lời

6

bọt cung cấp hai HttpAuthenticated lớp học, một trong các mô-đun suds.transport.http và lần thứ hai trong module suds.transport.https. Nó xuất hiện ngay lập tức của bạn từ suds.transport.http, tuy nhiên vì URL của bạn là https://, bạn có thể muốn thử suds.transport.https.HttpAuthenticated.

+0

+1. 'suds.transport.https.HttpAuthenticated' không nằm trong tài liệu. Giải pháp của bạn là câu trả lời cho vấn đề của tôi. –

5

Tôi tình cờ gặp vấn đề này và tìm ra giải pháp phù hợp với tôi. Máy chủ của tôi đang sử dụng xác thực NTLM, vì vậy đối với suds để làm việc với nó, tôi chỉ phải theo phần "Windows (NTLM)" trong documentation.

Đầu tiên cài đặt python-ntlm, và sau đó bạn có thể viết:

from suds.transport.https import WindowsHttpAuthenticated 
ntlm = WindowsHttpAuthenticated(username='xx', password='xx') 
client = Client(url, transport=ntlm) 
Các vấn đề liên quan