2014-09-05 20 views
0

我試圖訪問與使用泡沫Python的webservice。這裏是我的代碼:Suds - 例外:(401,u'Unauthorized')

# WSDL fails to import schema, import this and create client. 
imp = Import('http://schemas.xmlsoap.org/soap/encoding/') 
imp.filter.add('http://api.daisycon.com/publisher/soap//program/') 
d = ImportDoctor(imp) 
encoded = base64.b64encode("%s:%s" % (username, password)) 
authenticationHeader = { 
    "SOAPAction" : "http://api.daisycon.com/publisher/soap//program/#getSubscriptions", 
    "Authorization" : "Basic %s" % encoded 
} 
client = suds.client.Client(self.url, headers = authenticationHeader, doctor=d) 

但是,調用方法時產生以下錯誤:

No handlers could be found for logger "suds.client" 
Traceback (most recent call last): 
    File "C:\Users\User\Documents\Crawler\src\Crawlers\Daisycon.py", line 39, in <module> 
    Crawler().main() 
    File "C:\Users\User\Documents\Crawler\src\Crawlers\Daisycon.py", line 37, in main 
    print client.service.getSubscriptions() 
    File "C:\Python27\Lib\site-packages\suds\client.py", line 542, in __call__ 
    return client.invoke(args, kwargs) 
    File "C:\Python27\Lib\site-packages\suds\client.py", line 602, in invoke 
    result = self.send(soapenv) 
    File "C:\Python27\Lib\site-packages\suds\client.py", line 649, in send 
    result = self.failed(binding, e) 
    File "C:\Python27\Lib\site-packages\suds\client.py", line 708, in failed 
    raise Exception((status, reason)) 
Exception: (401, u'Unauthorized') 

我已經嘗試添加各種方式,我可以在網上找到的憑據。什麼都沒有我100%確信證書是正確的。

另一種方式我想:

t = HttpAuthenticated(username=username, 
          password=password) 
client = suds.client.Client(self.url, transport=t, doctor=d) 

這就造成:

No handlers could be found for logger "suds.client" 
Traceback (most recent call last): 
    File "C:\Users\User\Documents\Crawler\src\Crawlers\Daisycon.py", line 35, in  <module> 
    Crawler().main() 
    File "C:\Users\User\Documents\Crawler\src\Crawlers\Daisycon.py", line 33, in main 
    print client.service.getFeeds() 
    File "C:\Python27\Lib\site-packages\suds\client.py", line 542, in __call__ 
    return client.invoke(args, kwargs) 
    File "C:\Python27\Lib\site-packages\suds\client.py", line 602, in invoke 
result = self.send(soapenv) 
    File "C:\Python27\Lib\site-packages\suds\client.py", line 649, in send 
result = self.failed(binding, e) 
    File "C:\Python27\Lib\site-packages\suds\client.py", line 702, in failed 
r, p = binding.get_fault(reply) 
    File "C:\Python27\Lib\site-packages\suds\bindings\binding.py", line 265, in get_fault 
raise WebFault(p, faultroot) 
suds.WebFault: Server raised fault: 'Need authorisation' 

回答

0

可能的用戶名/密碼爲的SOAPHeaders通過呢?如果是這樣,你通過他們這樣的:

from suds.sax.attribute import Attribute 
from suds.sax.element import Element 
... 
usr = Element('USER').setText('username') 
pwd = Element('PASSWORD').setText('password') 
header_list = [usr, pwd] 
reqsoap_attribute = Attribute('xsi:type', "xsd:string") 
for param in header_list: 
    param.append(reqsoap_attribute) 
client.set_options(soapheaders=header_list) 

這將增加肥皂:頁眉部分的信封,如:

<soap:Header> 
    <USER xsi:type="xsd:string">username</USER> 
    <PASSWORD xsi:type="xsd:string">password</PASSWORD> 
</soap:Header> 
+0

引發同樣的錯誤在第二個例子。 – SergioP 2014-09-08 06:57:54

+0

沒有這樣的運氣(直接包含l/p到標題部分)?:headers = {'username':'username','password':'password'}然後傳遞給Client。你也可以試試這個:client.set_options(headers = {'username':'username','password':'password'}) – 2014-09-08 08:35:03

+0

也引發同樣的錯誤 – SergioP 2014-09-08 10:59:35