Как я могу заставить PySimpleSOAP сформировать запросы, такие как PHP SoapClient?

Я пишу серию скриптов для автоматизации задач на ISPConfig, консоли веб-хостинга. Что вам не нужно знать, на самом деле, потому что этот вопрос о формировании XML. По... причинам... Я хочу выполнить эту задачу на Python, а не на PHP. Цель моего первого сценария - создать новые почтовые ящики для данного домена, и у меня был некоторый существующий PHP-код для работы.

Все шло хорошо. Несмотря на несколько краткую документацию, я дошел до того, что мой сценарий связывался с API и передавал параметры с помощью вызовов pysimplesoap, как показано ниже.

client = pysimplesoap.client.SoapClient(location=SOAP_LOCATION,
                                        namespace=SOAP_URI, trace=True)
response = client.login(username=console_login, password=console_pass)
session_id = str(response.children().children().children())
params = {
          'server_id': 1,
          'email': mailbox.mail_id,
          'login': mailbox.mail_id,
          'password': mailbox.mail_pass,
           # plus more params here ...
         }
response = client.mail_user_add(session=session_id,
                                client=client_id, params=params)
client.logout(session=session_id)

Ошибок не возникало, вход в систему и выход из системы работали, однако, возвращаясь с консоли ISPConfig, был создан совершенно пустой почтовый ящик. Между тем, идентичные вызовы в PHP создают заполненные почтовые ящики.

После того, как оба языка отобразили свои ответы и запросы на экране, стало ясно, в чем проблема...

Python SOAP-запрос к серверу (используя код выше)

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n
<soap:Header/>\n
<soap:Body>\n    
    <mail_user_add xmlns="https://localhost:8080/remote/">\n  
    <session>8a7d6bc047a299974385f7e988570bc4</session>
    <params>
        <server_id>1</server_id>
        <email>someone@domain.com</email>
        <login>someone@domain.com</login>
        <blah>the rest of the params...</blah>
    </params>
    <client>0</client>
    </mail_user_add>\n
</soap:Body>\n
</soap:Envelope>

PHP SOAP запрос к серверу

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://66.212.164.9:8080/remote/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Body>
<ns1:mail_user_add>
<param0 xsi:type="xsd:string">b0048bd548a3062a3dbcbc49bc74a39c</param0>
<param1 xsi:type="xsd:int">0</param1>
<param2 xsi:type="ns2:Map">
    <item>
        <key xsi:type="xsd:string">server_id</key>
        <value xsi:type="xsd:int">1</value>
    </item>
    <item>
        <key xsi:type="xsd:string">email</key>
        <value xsi:type="xsd:string">someone@domain.com</value>
    </item>
    <item>
        <key xsi:type="xsd:string">login</key>
        <value xsi:type="xsd:string">someone@domain.com</value>
    </item>
    <item> ... </item>
</param2>
</ns1:mail_user_add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Что ж. Черт. Как мне сделать так, чтобы pysimplesoap создавало запросы в указанном выше формате, чтобы они могли правильно использоваться API?

(Если это не безнадежный случай, я использую обновленный pysimplesoap 1.16 с https://github.com/pysimplesoap/pysimplesoap Также python3)

PS Похоже, что ISPConfig, к сожалению, не предоставляет загадочный документ, известный как WSDL, о котором я только что начал читать. Это, вероятно, важно знать, и исключает клиента suds-jurko как план B, хотя это тоже выглядит неплохо. Cite no WSDL: http://bugtracker.ispconfig.org/index.php?do=details&task_id=1273 Cite не может использовать suds: https://lists.fedoraproject.org/pipermail/suds/2010-February/000702.html Февраль/ 000702. HTML

0 ответов

Другие вопросы по тегам