在 Python 中使用 api 请求时在 xml 正文中迭代页面

Iterate page in xml body when using api request in Python

我想从 api 获取所有数据,但是最大页面大小是 1000。 我认为的方法是迭代页面并将数据追加到一个空字典中。 但是,我不知道如何在字符串中申请循环。

下面是从postman复制过来的python脚本,最后一页是146。

    url = "http://example.com/default/svc-open/web-service-v2"

 body="""<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:ns1="http://www.example.org/Ec/">
  <SOAP-ENV:Body>
    <ns1:callService>
      <paramsJson>
        {
            "shipDateFor": "2020-01-01 00:00:00",
            "shipDateTo": "2021-02-01 00:00:00",
            "pagination":{"page":1,"pageSize":1000}
        }
      </paramsJson>
      <userName>user</userName>
      <userPass>123456</userPass>
      <service>getOrders</service>
    </ns1:callService>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>"""
    
    response = requests.request("POST", url, headers=headers, data=body)
    
    print(response.text)

如何申请循环遍历正文中的页码是一个字符串并将所有数据追加到一个空字典中?

您可以使用 fstring 将页码插入到 soap 请求中。以下是需要页码的请求部分的示例:

>>> page = 10
>>> print(f'''"pagination":{{"page":{page},"pageSize":1000}}''')
"pagination":{"page":10,"pageSize":1000}

请注意,您需要将现有的 {} 字符加倍并添加 {page},这是变量 page 的值将被插入的位置。

要在 for 循环中使用它,您可以使 body 字符串成为 fstring(通过使用 f 前缀)并对字符串的适当区域进行如上所示的更改。然后你会像这样迭代:

for page in range(1, 147):
    response = requests.request("POST", url, headers=headers, data=body)
    print(response.text)