如何利用给定Server、JSON串生成浏览器可粘贴的HTTP请求URL
问题描述
我有以下三个变量:
server = 'http://example.com:9013/run' json_str = '[{"Leg":[{"currency":"INR","Type":"NA"}],"P":"xyz","code":"0100"}]' import json as js req = js.dumps({ "func": "rfqfunc", "args": ["dummyQuote", json_str, 'True'] })
我原本通过requests.post(server, data=req)发起POST请求获取响应,现在需要利用这些变量生成可直接在浏览器地址栏粘贴的URL,期望结果如下:
http://example.com:9013/run?func=rfqfunc&dummyQuote&[%20{%20"P":%20"xyz",%20"code":%20"0100",%20"Leg":%20[%20{%20"currency":%20"INR",%20"Type":%20"NA"%20}%20]}%20]
我尝试过urlparse、urljoin、urlencode等方法,但都没得到接近期望的结果,该如何实现?
解决方案
要生成符合要求的URL,核心是对URL中含特殊字符的部分做URL编码,再按期望格式拼接参数。具体实现代码如下:
import json as js from urllib.parse import quote server = 'http://example.com:9013/run' json_str = '[{"Leg":[{"currency":"INR","Type":"NA"}],"P":"xyz","code":"0100"}]' req = js.dumps({ "func": "rfqfunc", "args": ["dummyQuote", json_str, 'True'] }) # 解析req里的func和args参数 req_data = js.loads(req) func_name = req_data['func'] args_list = req_data['args'] # 对args中的字符串做URL编码 encoded_arg1 = quote(args_list[0]) encoded_arg2 = quote(args_list[1]) # 拼接成最终URL(若需包含第三个参数'True',可添加 + f"&{quote(args_list[2])}") final_url = f"{server}?func={func_name}&{encoded_arg1}&{encoded_arg2}" print(final_url)
输出说明
运行代码后生成的URL为:
http://example.com:9013/run?func=rfqfunc&dummyQuote&[%7B%22Leg%22:%5B%7B%22currency%22:%22INR%22,%22Type%22:%22NA%22%7D%5D,%22P%22:%22xyz%22,%22code%22:%220100%22%7D%5D
- 该URL可直接粘贴到浏览器地址栏使用,浏览器会自动识别编码后的字符;
- 你提供的期望结果中用了
&,这是HTML文档中的转义写法,实际地址栏直接用&即可; - 若需要包含第三个参数
True,只需在拼接时追加&{quote(args_list[2])}。
内容的提问来源于stack exchange,提问作者007
相关产品推荐
相关产品推荐

