代理签名的SOAP呼叫

问题描述 投票:0回答:1

我有一个使用Python / Django构建的模拟服务器,该服务器在视图上接收SOAP请求并返回一组预定义的响应。

效果很好,但是在某些情况下,我也想将请求“代理”到真实的SOAP API。

我最初的想法是只获取请求正文,将其发送到真实的API,然后返回其响应。问题在于此SOAP API正在使用带有自签名证书的WS-Security签名。我尝试使用requests,但无法正常使用,因此这是我最近一次使用pycurl的尝试:

def post_hr(payload: bytes):
    buffer = BytesIO()

    curl = pycurl.Curl()
    curl.setopt(pycurl.URL, "https://webservices.kvk.nl/postbus2")
    curl.setopt(pycurl.SSL_VERIFYPEER, 0)
    curl.setopt(pycurl.SSL_VERIFYHOST, 0)
    curl.setopt(pycurl.CAINFO, settings.CA_INFO)
    curl.setopt(pycurl.SSLCERT, settings.SSL_CERT)
    curl.setopt(pycurl.POST, True)
    curl.setopt(pycurl.HTTPHEADER, ['SOAPAction: "http://es.kvk.nl/ophalenInschrijving"'])
    curl.setopt(pycurl.POSTFIELDS, payload)
    curl.setopt(pycurl.WRITEDATA, buffer)
    curl.perform()
    status = curl.getinfo(pycurl.RESPONSE_CODE)
    curl.close()
    return status, buffer.getvalue()

def view(request):
    ...
    if something:
        status, body = post_hr(request.body)
        return HttpResponse(body, status=status)

settings.CA_INFOsettings.SSL_CERT是从jks转换为pem的主叫服务器证书。

该代码使API返回带有500状态代码和其中包含“无效消息”错误的SOAP响应。

我不知道如何引发此错误,因为我只是发送正确的客户端使用的相同请求。

python soap ws-security
1个回答
0
投票

很抱歉,但是您的问题我没有答案。但是,我想寻求您的帮助。我必须在python中开发SOAP服务器。作为客户端,我正在使用Zeep。但是我不知道如何从服务器部分开始。我已经阅读了一些使用django和spyne的示例(但是我无法访问代码示例),但是它似乎已经过时了。请您告诉我您用于开发SOAP服务器的库是什么?您知道我可以使用的任何教程或指南吗?非常感谢]]

© www.soinside.com 2019 - 2024. All rights reserved.