2014-09-05 4 views
0

suds를 사용하여 파이썬으로 웹 서비스에 액세스하려고합니다. 메소드를 호출 할 때Suds - Exception : (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 % 확신합니다.

또 다른 방법은 내가 시도 :

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로 전달됩니다

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

이 결과 무엇입니까? 그렇다면, 당신은 다음과 같이 전달할 : 같은 봉투에 머리글 구역 :

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

두 번째 예에서와 같이 동일한 오류를 발생시킵니다

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) 

이 비누를 추가합니다. – SergioP

+0

그리고 이런 식으로 행운을 빈다. (헤더 부분에 직접 l/p를 포함한다.)? : headers = { 'username': 'username', 'password': 'password'}. 또한 이것을 시도 할 수 있습니다 : client.set_options (headers = { 'username': 'username', 'password': 'password'}) –

+0

또한 같은 오류를 발생시킵니다 – SergioP