【问题标题】:python3 - How to overcome max url limit with python requestspython3 - 如何使用 python 请求克服最大 url 限制
【发布时间】:2018-10-05 16:25:08
【问题描述】:

我有两个使用 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 或 requests 的 URL 请求的长度,或者这是一个标准化的东西。有没有办法解决这个问题,或者我需要找到另一种方式来启用这两个 python 应用程序之间的通信。如果无法通过 http 发送如此长的 JSON,您能否提出替代方案。谢谢!

【问题讨论】:

  • 这不是 Python 请求限制。最大 URL 长度是服务器强制执行的。
  • 对于这么大的数据,您应该使用 POST,而不是 GET。

标签: python json python-3.x python-requests web.py


【解决方案1】:

不要将那么多数据放入 URL。大多数浏览器将 URL(包括查询字符串)的总长度限制为大约 2000 个字符,服务器限制在大约 8000 个字符。

参见What is the maximum length of a URL in different browsers?,它引用了HTTP/1.1 标准,RFC7230

在实践中发现了对请求行长度的各种特殊限制。建议所有 HTTP 发送方和接收方至少支持 8000 个八位字节的请求行长度。

您需要在请求正文中发送这么多数据。使用 POST 或 PUT 作为方法。

requests 库本身对 URL 长度没有任何限制;它将 URL 发送到服务器而不截断它。 你的服务器在这里截断了它,而不是给你一个414 URI Too Long状态码。

【讨论】:

    猜你喜欢
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多