简体   繁体   English

如何在 Odoo 15 中使用 Python 请求发布 XML ElementTree

[英]How to post an XML ElementTree with Python Requests in Odoo 15

Good day, I am trying to post xml file that i have generated with ElementTree, when i try to post it i get error below.美好的一天,我正在尝试发布我用 ElementTree 生成的 xml 文件,当我尝试发布它时,我在下面收到错误。 Please help.请帮忙。

{"env:Envelope": {"@xmlns:env": "http://schemas.xmlsoap.org/soap/envelope/", "env:Header": null, "env:Body": {"env:Fault": {"@xmlns:env": "http://schemas.xmlsoap.org/soap/envelope/", "faultcode": "env:Server", "faultstring": "Cannot create SOAP envelope from: ClaimBatch"}}}}

I Have visted this link but no help, How do I send XML ElementTree with Python Requests我访问过此链接但没有帮助,如何使用 Python 请求发送 XML ElementTree

def batch_file(self):        
    Transaction = etree.Element("ClaimBatch")
    BatchHeader = etree.Element("BatchHeader")
    
    batchDate = etree.SubElement(BatchHeader, "batchDate")
    batchDate.text = ''
        
    Transaction.append(BatchHeader)

    for claim in self.claim_ids:
        Claim = etree.Element("Claim")
        
        transactionType = etree.SubElement(Claim, "transactionType")
        transactionType.text = ''

        testClaim =  etree.SubElement(Claim, "testClaim")
        testClaim.text = ''
        
        Lines = etree.Element("Lines")             
            
        Line = etree.Element("Line")
        
        lineNo = etree.SubElement(Line, "lineNo")
        lineNo.text = '1'

                
        Lines.append(Line)
        Claim.append(Lines)           
        

        Transaction.append(Claim)
    BatchTrailer = etree.Element("BatchTrailer")
    
    numClaims = etree.SubElement(BatchTrailer, "numClaims")   
    
    batchTotal = etree.SubElement(BatchTrailer, "batchTotal")       
    batchTotal.text = ''
    
    Transaction.append(BatchTrailer)
    
    # Generate Batch File

    url = 'http://IP_ADDRESS/some_texxt/realTimeClaimWS?wsdl/'

    try:
        send_xml_data = requests.post(url, data=ET.tostring(Transaction, encoding='utf-8'), verify=False).text
        respose = xmltodict.parse(send_xml_data)
        set_json = json.dumps(respose)
        self.error_msg = set_json                
    except Exception as e:
        self.error_msg = str(e)

I recommend to use use zeep.我建议使用 zeep。 Much less manual processing.人工处理少得多。

from zeep import Client

jadajada_api_wsdl_url = "https://....?wsdl"

client = Client(jadajada_api_wsdl_url)

request = {
"BatchHeader":{"batchDate":""}
# jada jada
}
node = client.service.YourServiceFunction(ClaimBatch=request)

and also to see the generated xml并查看生成的 xml

nodes = client.create_message(client.service, "YourServiceFunction", ClaimBatch=request)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM