如何用Python构造含正确XML的POST请求调用海康威视ISAPI
解决海康威视ISAPI logSearch接口XML格式错误问题
以下是针对你遇到的Invalid XML Format错误的具体排查和解决思路:
修复XML转义字符问题
你当前payload里的<和>是HTML转义后的字符,接口需要的是原始XML标签(<和>)。从网页抓包得到的内容可能经过了转义,直接复用会导致XML格式无效。把所有<替换为<,>替换为>,还原成标准XML结构。调整payload的写法
改用Python原生多行字符串定义payload,避免不必要的转义:payload = '''<?xml version="1.0" encoding="UTF-8"?> <CMSearchDescription> <searchID>CA32CBsadasdasda1A83</searchID> <metaId>log.std-cgi.com/Operation/devicePowerOn</metaId> <timeSpanList> <timeSpan> <startTime>2023-02-09T00:00:00Z</startTime> <endTime>2023-03-09T23:59:59Z</endTime> </timeSpan> </timeSpanList> <maxResults>100</maxResults> </CMSearchDescription>'''验证XML语法合法性
把调整后的payload复制到XML编辑器(如VS Code的XML插件)中检查,确保所有标签闭合、没有多余字符、编码声明与实际编码一致。哪怕只修改了searchID,也可能不小心引入了空格或符号错误。优化请求头设置
给Content-Type加上明确的字符集,确保与XML编码匹配:headers = {'Content-Type': 'application/xml; charset=utf-8'}强制指定编码发送
尝试将payload转为UTF-8编码的bytes格式发送,避免字符串转码异常:output = requests.post( f"http://{targetIP}/{apiPath}", auth=HTTPDigestAuth(login, password), data=payload.encode('utf-8'), headers=headers, timeout=30 )
内容的提问来源于stack exchange,提问作者Gregory Sky
相关产品推荐
相关产品推荐

