如何使用python(suds)签署XML

时间:2016-10-31 18:13:19

标签: python soap suds

我一直在尝试签署由suds创建的XML对象,但我没有运气。

我当前的脚本看起来像这样。

from suds.client import Client
from suds.transport.http import HttpAuthenticated
from suds.transport import Reply, TransportError

import requests

class RequestsTransport(HttpAuthenticated):

    def __init__(self, **kwargs):
        self.cert = kwargs.pop('cert', None)
        HttpAuthenticated.__init__(self, **kwargs)

    def send(self, request):
        self.addcredentials(request)
        resp = requests.post(
            request.url,
            data=request.message,
            headers=request.headers,
            cert=self.cert,
            verify=True
        )
        result = Reply(resp.status_code, resp.headers, resp.content)
        return result

url = 'URL'
headers = {"Content-Type": "text/xml;charset=UTF-8",
           "SOAPAction": ""}
t = RequestsTransport(cert=("path to cert","path to key"))
client = Client(url, headers=headers, transport=t)

我创建了一个方法然后我需要签名。我有一个pem文件,用于我正在检查的WSDL的公共证书。

另外,如果我没有签署请求,我会得到:

suds.WebFault:服务器引发的错误:'发现处理标题'

的错误

1 个答案:

答案 0 :(得分:1)

我发现python-wsse(https://py-wsse.readthedocs.io/en/latest/)可以像魅力一样使用suds。

StringUtils