2011-01-31 128 views
0

我尝试在Python中发送SOAP请求时添加头文件。在请求中添加头文件python中的SOAP消息

头在SOAP是:

> <SOAP-ENV:Header> 
> <ns3:userCredentials 
> xsi:type="https://4psa.com/HeaderData.xsd/2.0.0"> 
> <username>admin</username> 
> <password>welcome</password> 
> </ns3:userCredentials> 
> </SOAP-ENV:Header> 

我用:

from suds.client import Client 
from suds.xsd.doctor import ImportDoctor, Import 
wsdl = 'https://192.168.1.15//soap2/schema/2.5.0/Report/Report.wsdl' 
client = Client(wsdl) 

,我不`吨知道如何头部添加到该代码。

请建议如何添加它。

而且我想:

> >>> from suds.client import Client 
> >>> from suds.xsd.doctor import ImportDoctor, Import 
> >>> imp = Import('http://schemas.xmlsoap.org/soap/encoding/') 
> >>> url = 'https://192.168.1.15//soap2/schema/2.5.0/Report/Report.wsdl' 
> >>> client = Client(url) 
> >>> userid = 'admin' 
> >>> passwd = '[email protected]' 
> >>> client.set_options(soapheaders=(userid,passwd)) 
> >>> print client a get error when run: 
> 
> >>> client.service.CallCosts(1) Traceback (most recent call last): 
> File "<stdin>", line 1, in <module> 
> File 
> "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py", 
> line 542, in __call__ 
>  return client.invoke(args, kwargs) File 
> "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py", 
> line 602, in invoke 
>  result = self.send(soapenv) File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py", 
> line 637, in send 
>  reply = transport.send(request) File 
> "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/transport/https.py", 
> line 64, in send 
>  return HttpTransport.send(self, request) File 
> "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/transport/http.py", line 77, in send 
>  fp = self.u2open(u2request) File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/transport/http.py", line 118, in u2open 
>  return url.open(u2request, timeout=tm) File 
> "/usr/lib/python2.6/urllib2.py", line 
> 391, in open 
>  response = self._open(req, data) File "/usr/lib/python2.6/urllib2.py", 
> line 409, in _open 
>  '_open', req) File "/usr/lib/python2.6/urllib2.py", line 
> 369, in _call_chain 
>  result = func(*args) File "/usr/lib/python2.6/urllib2.py", line 
> 1169, in https_open 
>  return self.do_open(httplib.HTTPSConnection, 
> req) File 
> "/usr/lib/python2.6/urllib2.py", line 
> 1136, in do_open 
>  raise URLError(err) urllib2.URLError: <urlopen error 
> [Errno 111] Connection refused> 

,如果你知道这里有什么问题请提出。

+0

你的问题不是很清楚,请修改并重新发布。 – codeScriber 2011-01-31 09:18:50

回答

0

泡沫客户端有很多可以用来控制库的行为。有些是一般选项,其他则是运输选项。虽然,选项对象被暴露出来,设置/取消选项的优选和支承的方式是通过:

  • 客户构造
  • 的Client.set_options()
  • 的运输构造(多个)。

肥皂盒 - 提供肥皂标题。

0

我做了这样的事情

def client_with_token(token): 
    header_ns = ('ns1', "http://4psa.com/HeaderData.xsd/3.5.0") 
    access_token = Element('accessToken', ns=header_ns).setText(token) 
    auth_header = Element('userCredentials', ns=header_ns) 
    auth_header.append(access_token) 
    client = Client(url) 
    auth_header = get_auth_header() 
    client.set_options(soapheaders=auth_header, *args, **kwargs) 
    return client 
相关问题