python3 - 如何克服 python 请求的最大 url 限制
python3 - How to overcome max url limit with python requests
我在使用 web.py 的不同端口上有两个 python 应用程序 运行。我正在尝试从一个应用程序向另一个应用程序发送长度在 30,000-40,000 个字符范围内的 JSON 字符串。 JSON 包含生成 powerpoint 报告所需的所有信息。我尝试使用这样的请求启用此通信:
import requests
template = <long JSON string>
url = 'http://0.0.0.0:6060/api/getPpt?template={}'.format(template)
resp= requests.get(url).text
我注意到在接收端 json 已被截断为 803 个字符长,因此当它解码 JSON 我得到:
json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 780 (char 779)
我认为这必须限制来自 web.py 或请求的 URL 请求的长度,或者这是标准化的事情。有没有办法解决这个问题,或者我是否需要找到另一种方法来启用这两个 python 应用程序之间的通信。如果通过 http 发送这么长的 JSONs 是不可能的,请提出替代方案。谢谢!
不要将那么多数据放入 URL。大多数浏览器将 URL 的总长度(包括查询字符串)限制为大约 2000 个字符,服务器限制为大约 8000 个字符。
见What is the maximum length of a URL in different browsers?, which quotes the HTTP/1.1 standard, RFC7230:
Various ad hoc limitations on request-line length are found in practice. It is RECOMMENDED that all HTTP senders and recipients support, at a minimum, request-line lengths of 8000 octets.
您需要改为在请求正文中发送那么多数据。使用 POST 或 PUT 作为方法。
requests
库本身对 URL 长度没有任何限制;它将 URL 发送到服务器而不截断它。是你的服务器在这里截断了它,而不是给你一个414 URI Too Long状态码。
我在使用 web.py 的不同端口上有两个 python 应用程序 运行。我正在尝试从一个应用程序向另一个应用程序发送长度在 30,000-40,000 个字符范围内的 JSON 字符串。 JSON 包含生成 powerpoint 报告所需的所有信息。我尝试使用这样的请求启用此通信:
import requests
template = <long JSON string>
url = 'http://0.0.0.0:6060/api/getPpt?template={}'.format(template)
resp= requests.get(url).text
我注意到在接收端 json 已被截断为 803 个字符长,因此当它解码 JSON 我得到:
json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 780 (char 779)
我认为这必须限制来自 web.py 或请求的 URL 请求的长度,或者这是标准化的事情。有没有办法解决这个问题,或者我是否需要找到另一种方法来启用这两个 python 应用程序之间的通信。如果通过 http 发送这么长的 JSONs 是不可能的,请提出替代方案。谢谢!
不要将那么多数据放入 URL。大多数浏览器将 URL 的总长度(包括查询字符串)限制为大约 2000 个字符,服务器限制为大约 8000 个字符。
见What is the maximum length of a URL in different browsers?, which quotes the HTTP/1.1 standard, RFC7230:
Various ad hoc limitations on request-line length are found in practice. It is RECOMMENDED that all HTTP senders and recipients support, at a minimum, request-line lengths of 8000 octets.
您需要改为在请求正文中发送那么多数据。使用 POST 或 PUT 作为方法。
requests
库本身对 URL 长度没有任何限制;它将 URL 发送到服务器而不截断它。是你的服务器在这里截断了它,而不是给你一个414 URI Too Long状态码。