簡體   English   中英

如何將 XML 發布請求翻譯為 python

[英]How to translate XML post request to python

我需要將 C# 發布請求發送的XML格式的參數轉換為 python dictionary/json格式。

這是xml中的請求和參數:

SERVER_URL = http://www.server/DCTServer.aspx

<server>
   <requests>
      <Session.loginRq userName="user" password="123" />
         <OnlineData.loadPolicyRq policyNumber=" 8800000093" />
         <Session.getDocumentRq />
      <Session.closeRq />
   </requests>
</server>

這是我嘗試過的:

import requests

url = 'http://www.server/DCTServer.aspx'
params = {
    'server': {
        'requests': {
            'Session.loginRq': {
                'userName': "user",
                'password':'123'
            },
            'OnlineDataloadPolicyRq': {
                'policyNumber': "8800000093"
            }
        }
    }
}

我收到JSONDecodeError: Expecting value錯誤。 我什至不確定我是否正確設置了參數。

這是我第一次不得不翻譯(甚至閱讀)C#。 提前感謝您提供的任何幫助。

我嘗試使用https://jsonlint.com 驗證您的 JSON 這是無效的,因為您可以在jQuery.parseJSON 單引號與雙引號中看到單引號請嘗試以下操作:

{
    "server": {
        "requests": {
            "Session.loginRq": {
                "userName": "user",
                "password": "123"
            },
            "OnlineDataloadPolicyRq": {
                "policyNumber": "8800000093"
            }
        }
    }
}

驗證 JSON 的地方。

In Python, could be useful, json.dumps on the server dictionary, or even better dicttoxml to get the correct xml ( https://pypi.org/project/dicttoxml/ ):

import json
import dicttoxml

params = {
    'server': {
        'requests': {
            'Session.loginRq': {
                'userName': 'user',
                'password': '123'
            },
            'OnlineDataloadPolicyRq': {
                'policyNumber': '8800000093'
            }
        }
    }
}

print(json.dumps(params))

print(dicttoxml.dicttoxml(params, attr_type=False))

輸出正確的 json。

我剛剛發現我可以將 xml 直接作為字符串發布:

import requests 

SERVER_URL = http://www.server/DCTServer.aspx

xml = """<?xml version='1.0' encoding='utf-8'?>
<server>
   <requests>
      <Session.loginRq userName="user" password="123" />
         <OnlineData.loadPolicyRq policyNumber="8800000093" />
         <Session.getDocumentRq />
      <Session.closeRq />
   </requests>
</server>
"""
headers = {'Content-Type': 'application/xml'} # set what your server accepts
requests.post('http://faapcdd0799v.zurich.com:81/DuckCreek/DCTServer.aspx',
                    data=xml, headers=headers)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM