Python中如何在POST请求中传递多词查询?
问题分析与解决
你遇到的问题是手动拼接JSON字符串时未正确转义双引号,导致服务器无法解析请求体。
从错误返回的body可以看到,生成的JSON里query字段变成了:
"query": "title:"search this""
这里title:后面的双引号直接闭合了query的字符串值,剩下的search this""完全破坏了JSON结构,所以服务器返回entity.parse.failed错误。
正确解决方法:用json模块序列化数据
不要手动拼接JSON字符串,改用Python的json模块来生成合法的JSON格式,它会自动处理所有需要转义的字符。
修改后的代码如下:
import json import cgi query = "title:\"search this\"" # 或者用单引号包裹更直观:query = 'title:"search this"' form = cgi.FieldStorage() n = form.getvalue('n') # 先构造Python字典 request_data = { "cat": "boats", "query": query, "size": int(n) # 注意把n转成整数,避免JSON里是字符串类型 } # 序列化为标准JSON字符串 data = json.dumps(request_data, indent=2)
这样生成的data里,query字段会被正确转义为:
"query": "title:\"search this\""
完全符合JSON语法规范,服务器就能正常解析了。
额外提示
- 尽量避免手动拼接JSON,除非你能确保所有特殊字符都正确转义,否则很容易出现格式错误。
form.getvalue('n')返回的是字符串类型,如果服务器要求size是整数,一定要转换类型,否则可能引发其他错误。
内容的提问来源于stack exchange,提问作者Jav Ll
相关产品推荐
相关产品推荐

