ไคลเอนต์ zeep SOAP เข้ารหัส double base64 ที่ไม่คาดคิด

โปรดช่วยฉันเข้าใจว่าเหตุใดค่าในคำขอของฉันจึงถูกเข้ารหัสเป็น base64 สองครั้ง:

ส่วนที่เกี่ยวข้องของ wsdl ที่ฉันใช้:

<wsdl:types>
      <xsd:schema targetNamespace="http://www.blabla.com/">
         <xsd:element name="createHeaderSecurityRequest" type="xsd:base64Binary"/>

 <wsdl:message name="createHeaderSecurityRequestMessage">
      <wsdl:part element="tns:createHeaderSecurityRequest" name="parameters"/>
   </wsdl:message>

<wsdl:operation name="createHeaderSecurity">
         <wsdl:input message="tns:createHeaderSecurityRequestMessage"/>
         <wsdl:output message="tns:createHeaderSecurityResponseMessage"/>
         <wsdl:fault message="tns:faultMessage" name="createHeaderSecurityFaultMessage"/>
/wsdl:operation>

รหัสของฉัน:

from zeep import Client
message = 'my message, that needs to be encoded in base64 only once'
wsdl = 'http://xxxxxxx?wsdl'
client = Client(wsdl)
request = client.create_message(client.service, 'createHeaderSecurity', message.encode())

สิ่งที่ฉันได้รับ (ข้อความเข้ารหัสอัตโนมัติเป็น base64 สองครั้ง): request =

<soap-env:Body xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
   <ns0:createHeaderSecurityRequest xmlns:ns0="http://www.blabla.com/">YlhrZ2JXVnpjMkZuWlN3Z2RHaGhkQ0J1WldWa2N5QjBieUJpWlNCbGJtTnZaR1ZrSUdsdUlHSmhjMlUyTkNCdmJteDVJRzl1WTJVPQ==</ns0:createHeaderSecurityRequest>
</soap-env:Body>

สิ่งที่ฉันต้องการ (ค่าข้อความที่เข้ารหัสเป็น base64 เพียงครั้งเดียว): request =

<soap-env:Body xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
   <ns0:createHeaderSecurityRequest xmlns:ns0="http://www.blabla.com/">bXkgbWVzc2FnZSwgdGhhdCBuZWVkcyB0byBiZSBlbmNvZGVkIGluIGJhc2U2NCBvbmx5IG9uY2U=</ns0:createHeaderSecurityRequest>
</soap-env:Body>

ฉันจะขอบคุณมากสำหรับความช่วยเหลือใด ๆ

zeep 3.4.0 หลาม 3.7.3


person Hello    schedule 16.07.2019    source แหล่งที่มา


คำตอบ (1)


ลองลบ encode() ในสตริงของคุณ

request = client.create_message(client.service, 'createHeaderSecurity', message)

Zeep เข้ารหัสข้อมูลไบต์เป็น base64 โดยอัตโนมัติ

person Michał Dobrzyński    schedule 16.01.2020