gpt4 book ai didi

python - 如何使用 python (suds) 对 XML 进行签名

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:49 25 4
gpt4 key购买 nike

我一直在尝试对 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)

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

此外,如果我不签署请求,我会得到:

suds.WebFault:服务器引发错误:“处理 header 时发现错误”

最佳答案

我发现 python-wsse ( https://py-wsse.readthedocs.io/en/latest/ ) 与泡沫一起工作就像一个魅力。

    from suds.client import Client
from suds.wsse import Security, Timestamp
from wsse.suds import WssePlugin

def get_client(our_keyfile_path, our_certfile_path, their_certfile_path):
wsse = Security()
wsse.tokens.append(Timestamp())

return Client(
wsdl_url,
transport=transport,
wsse=wsse,
plugins=[
WssePlugin(
keyfile=our_keyfile_path,
certfile=our_certfile_path,
their_certfile=their_certfile_path,
),
],
)

关于python - 如何使用 python (suds) 对 XML 进行签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40348040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com