如何在Python请求中传递已存在的字符串变量作为原始格式数据
如何在Python请求中传递已存在的字符串变量作为原始格式数据
其实你不用太纠结“原始格式”这个点——Python里的r''只是定义字符串时的语法糖,用来写字符串时不用手动转义反斜杠,变量里实际存储的字符串内容,和普通字符串是完全一样的。只要你的现有字符串内容是正确的JSON格式,直接传给data参数就行,不需要额外转换。下面分情况给你说具体怎么操作:
情况1:你的现有字符串内容已经是正确的JSON格式
如果你的变量里的字符串,和原来用r''定义的内容完全一致(比如已经包含了正确的转义,像\"这种),那直接用就行,代码如下:
# 假设你已经有了这个预存的变量 existing_data = '{"desc":"a man walking","useOriginPrompt":false,"fileList":[],"modelID":"23010","quantity":"1","extra":{"promptStruct":"{\\"value\\":[{\\"type\\":\\"paragraph\\",\\"children\\":[{\\"text\\":\\"a man walking\\"}]}],\\"length\\":13,\\"plainLength\\":13,\\"rawLength\\":13}"}}' # 直接把变量传给data参数,和原来用r''定义的效果完全一样 response = requests.post( "https://theapi.com/api/multimodal/generate/video", params=params, cookies=cookies, headers=headers, data=existing_data, )
情况2:你的现有字符串有转义问题(比如引号没转义)
如果你的预存字符串是未转义的(比如里面的嵌套双引号没有写成\"),手动改转义容易出错,推荐用json模块来处理,把字典转成标准的JSON字符串:
import json # 先把数据写成字典形式(不用管转义,Python会帮你处理) data_dict = { "desc": "a man walking", "useOriginPrompt": False, "fileList": [], "modelID": "23010", "quantity": "1", "extra": { "promptStruct": '{"value":[{"type":"paragraph","children":[{"text":"a man walking"}]}],"length":13,"plainLength":13,"rawLength":13}' } } # 用json.dumps转成标准JSON字符串 existing_data = json.dumps(data_dict) # 再传给data参数 response = requests.post( "https://theapi.com/api/multimodal/generate/video", params=params, cookies=cookies, headers=headers, data=existing_data, )
更省心的写法:直接传字典给json参数
其实curl_cffi的requests和原生requests一样,支持直接传字典给json参数,它会自动帮你转成JSON字符串,还能自动处理Content-Type(当然你headers里已经设置了,也不冲突):
data_dict = { "desc": "a man walking", "useOriginPrompt": False, "fileList": [], "modelID": "23010", "quantity": "1", "extra": { "promptStruct": '{"value":[{"type":"paragraph","children":[{"text":"a man walking"}]}],"length":13,"plainLength":13,"rawLength":13}' } } response = requests.post( "https://theapi.com/api/multimodal/generate/video", params=params, cookies=cookies, headers=headers, json=data_dict, # 这里用json参数代替data,更省心 )
补充说明
原来的r''只是让你在写字符串的时候不用反复打\来转义,但一旦字符串存在变量里,它和普通字符串就没区别了——核心是字符串内容要符合接口要求的JSON格式,而不是“必须是原始字符串类型”。只要内容对,直接用就好~
备注:内容来源于stack exchange,提问作者Noob
相关产品推荐
相关产品推荐

