You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Requests中百分号导致Aspen IP21 REST API查询失败

Python Requests调用Aspen IP21 REST API时LIKE语句%符号失效问题

使用Python requests库通过REST API查询Aspen IP21时,大部分场景都能正常运行,但当SQL查询中包含带%的LIKE语句时,查询就会失效。尝试将%替换为URL编码后的%25,但该API不兼容这种写法。奇怪的是,把代码生成的URL直接复制到浏览器中,却能正常返回结果。

第一次尝试的代码

url = '''https://server.com/ProcessData/AtProcessDataREST.dll/SQL?<SQL ds="host" dso="CHARINT=Y;CHARFLOAT=Y;CHARTIME=Y;CONVERTERRORS=N" t="SQLplus" m="1000000" to="60" s="1"><![CDATA[SELECT name FROM history WHERE name LIKE 'G7%']]></SQL>'''

requests.get(url,  auth=HTTPKerberosAuth()).json()

返回结果:

{'data': [{'r': 'N'}]}

第二次尝试(手动拼接URL)

怀疑是百分号被自动编码导致问题,于是尝试手动拼接URL:

url = 'https://server.com/ProcessData/AtProcessDataREST.dll/SQL'
query = '''?<SQL ds="host" dso="CHARINT=Y;CHARFLOAT=Y;CHARTIME=Y;CONVERTERRORS=N" t="SQLplus" m="1000000" to="60" s="1"><![CDATA[SELECT name FROM history WHERE name LIKE 'G7%']]></SQL>'''

s = requests.Session()
req = requests.Request('GET', url,  auth=HTTPKerberosAuth())
p = req.prepare()
p.url += query
resp = s.send(p)

返回结果依然是:

{'data': [{'r': 'N'}]}
但此时通过print(p.url)输出的URL,复制到浏览器中可以正常查询到结果。

第三次尝试(替换%为%25)

尝试将SQL语句中的%替换为%25:

url = 'https://server.com/ProcessData/AtProcessDataREST.dll/SQL'
query = '''?<SQL ds="host" dso="CHARINT=Y;CHARFLOAT=Y;CHARTIME=Y;CONVERTERRORS=N" t="SQLplus" m="1000000" to="60" s="1"><![CDATA[SELECT name FROM history WHERE name LIKE 'G7%25']]></SQL>'''

s = requests.Session()
req = requests.Request('GET', url,  auth=HTTPKerberosAuth())
p = req.prepare()
p.url += query
resp = s.send(p)

结果还是返回{'data': [{'r': 'N'}]},而且此时把URL粘贴到浏览器中也无法正常工作。

推测问题根源是Python requests库对%进行了额外编码,导致SQL LIKE语句无法正确匹配目标内容。


内容的提问来源于stack exchange,提问作者Lee G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:33:26