如何将XML post请求转换为python

2024-10-06 07:01:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将C#post请求发送的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。提前感谢您提供的任何帮助


Tags: http参数serversessionwww格式usernamepassword
2条回答

我刚刚发现我可以直接将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)

我已尝试使用https://jsonlint.com验证您的JSON。 它无效,因为在jQuery.parseJSON single quote vs double quote中可以看到单引号 请试试这个:

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

验证JSON的地方

在Python中,将json.dump放在服务器字典上可能很有用,或者更好地使用dictOXML来获取正确的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

相关问题 更多 >