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

如何用Python Requests突破URL长度限制?Web.py跨应用传长JSON

解决基于web.py的两个应用间超长JSON传输异常问题

你遇到的问题大概率是GET请求的URL长度限制和未编码的JSON特殊字符导致的——30000-40000字符的JSON直接塞进URL参数,完全超出了大部分服务器对GET请求URL的默认长度限制,而且JSON里的&、=、空格这类字符会被URL解析器当成参数分隔符,直接破坏JSON结构。

给你两个靠谱的解决方案,优先推荐第一个:

方案一:改用POST请求传输JSON(最稳妥)

POST请求的请求体没有严格的长度限制(只要服务器配置允许),而且不用处理URL编码的麻烦,是传输大量数据的标准方式。

发送端修改代码:

把requests.get改成requests.post,并将JSON放在请求体中(requests会自动帮你设置正确的Content-Type并处理编码):

import requests
template = <长JSON字符串>
url = 'http://0.0.0.0:6060/api/getPpt'
# 用json参数直接传入,requests会自动序列化并设置Content-Type: application/json
resp = requests.post(url, json=template).text

接收端web.py代码调整:

修改接口为POST方法,从请求体中读取JSON数据:

import web
import json

urls = (
    '/api/getPpt', 'GetPptHandler'
)

class GetPptHandler:
    def POST(self):
        # 读取请求体中的原始数据并解析为JSON
        raw_data = web.data()
        try:
            template = json.loads(raw_data)
            # 这里写你的PPT生成逻辑
            # ...
            return json.dumps({"status": "success", "message": "PPT生成中"})
        except json.JSONDecodeError:
            return json.dumps({"status": "error", "message": "JSON格式错误"})

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

方案二:如果必须用GET(不推荐)

如果因为某些原因必须用GET,你需要做两件事:

  1. 对JSON字符串做URL编码,避免特殊字符破坏URL结构
  2. 调整接收端web.py服务器的配置,允许更长的URL

发送端修改代码:

import requests
import urllib.parse

template = <长JSON字符串>
# 对JSON做URL编码
encoded_template = urllib.parse.quote(template)
url = f'http://0.0.0.0:6060/api/getPpt?template={encoded_template}'
resp = requests.get(url).text

接收端调整:

  • 首先要解码URL参数:
class GetPptHandler:
    def GET(self):
        params = web.input()
        # 解码URL编码的JSON字符串
        template = urllib.parse.unquote(params.template)
        try:
            template_json = json.loads(template)
            # 处理逻辑...
        except json.JSONDecodeError:
            # 错误处理...
  • 然后需要调整web.py的服务器配置(比如用内置的wsgiserver时,设置max_request_line),或者如果用nginx反向代理,也要调整client_max_body_size和large_client_header_buffers等参数,否则超长URL会被截断。

但还是强烈建议用POST,GET本来就不是为传输大量数据设计的,后续维护和兼容性都会有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:18:59