2017-03-28 9 views
0

suds 클라이언트를 사용하여 API에 요청을 보내려고합니다.비누 비누 클라이언트에 대한 헤더를 올바르게 설정하는 방법

요청은 다음과 같이 형성된다 :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v20="https://API"> 
    <soapenv:Header> 
     <v20:apiHeader> 
     <v20:username>username</v20:username> 
     <v20:password>password</v20:password> 
     <!--Optional:--> 
     <v20:name>?</v20:name> 
     </v20:apiHeader> 
    </soapenv:Header> 
    <soapenv:Body> 
     <v20:getLoginDetails/> 
    </soapenv:Body> 
</soapenv:Envelope> 

이 같은 요청을 보내고 :

client = Client('https://wsdl', faults=False) 

client.set_options(headers={'username': username 'authToken': auth_token, 'name': ''}) 
client.service.getLoginDetails() 

내가 수신하고있는 오류입니다 :

(<HTTPStatus.INTERNAL_SERVER_ERROR: 500>, (Fault){ 
    faultcode = "soap:Server" 
    faultstring = "apiHeader should not be null" 
    detail = "" 
}) 

이인가 요청을 어떻게 보내야합니까? 그것은 분명히 내가 생각하는 apiHeader와 관련이 있습니다. 하지만, 내가 이것을 사용하여 동일한 오류가 무엇인지 확실하지 :

나는이 비슷한 사용하여이 작업을했습니다
username = Element('username').setText(name) 
     password= Element('password').setText(pass) 
     header_list = [username, pass] 
     self.client.set_options(soapheaders=header_list) 
     return self.client.service.getLoginDetails() 

답변

0

:

from suds.sax.element import Element 
from suds.sax.attribute import Attribute 
code = Element('serviceCode').setText('PABB4BEIJING') 
pwd = Element('servicePwd').setText('QWERTPABB') 

reqsoapheader = Element('ReqSOAPHeader').insert(code) 
reqsoap_attribute = Attribute('xmlns', "http://schemas.acme.eu/") 
reqsoapheader.append(reqsoap_attribute) 

client.set_options(soapheaders=reqsoapheader)