Python urlopen对json数据的64k限制
在一个问题上撞我的头。我将提前警告,这是不可复制的,因为我不能分享我的终点。我也是一名数据科学家,所以我对网络技术的知识有限Python urlopen对json数据的64k限制,python,urllib,Python,Urllib,在一个问题上撞我的头。我将提前警告,这是不可复制的,因为我不能分享我的终点。我也是一名数据科学家,所以我对网络技术的知识有限 from urllib.request import Request, urlopen url = "https://www.some_endpoint.com/" req = Request( url, headers={"API-TOKEN": "some_token"}) json_string = "{"object": "XYZ".....}" re
from urllib.request import Request, urlopen
url = "https://www.some_endpoint.com/"
req = Request(
url, headers={"API-TOKEN": "some_token"})
json_string = "{"object": "XYZ".....}"
response = urlopen(req, json_string.encode("utf-8"))
我在公开场合有不寻常的行为。当我的JSON小于65536字节时,如计算len(JSON_string.encode('utf-8'))
所示,这个urlopen调用工作正常。当它超过这个限制时,我得到一个htp500
错误
这纯粹是服务器端对大小的错误限制吗?不同寻常的是,当大数据通过GUI传递到端点时,它工作正常。或者我可以在urlopen上将数据分块到低于64k字节吗?是否有处理此问题的行业标准?HTTP 500错误表示“内部服务器错误”。理论上,这意味着代码没有问题,服务器有问题 实际上,HTTP 500错误可能意味着几乎任何东西,因为当程序员没有提供更具体的错误代码时,许多服务器将使用HTTP 500作为默认错误代码。不幸的是,这意味着你只能猜测别人的代码是如何工作的 以下是一些可能的方法:
- 服务器的最大请求大小可能为64 KiB。您可以通过使用更紧凑的JSON(删除分隔符之间的空格)或使用
来减少请求大小内容编码:gzip
import gzip import json # Remove whitespace from JSON json_string = json.dumps( json.loads(json_string), separators=(',', ':')) # Encode as Gzip json_data = gzip.compress( json_string.encode('UTF-8')) req = Request( url, headers={"API-TOKEN": "some_token", "Content-Encoding": "gzip"}) response = urlopen(req, json_data)
- 可能有某种方法可以将请求拆分或分块为多个较小的请求。这需要了解您正在使用的确切API
- 可能是服务器或链中某处的代理中存在某种缺陷,阻止您以书面形式发送请求。如果
对>64 KiB无效,您可以尝试使用内容长度
。服务器可能希望使用100 Continue,但传输编码:chunked
不支持此操作urllib
如果使用Charles之类的工具对GUI客户端进行MITM,您可以看到请求的确切格式,并且您可以使自己的请求使用相同的格式。这取决于服务器。无论如何,我建议切换到Requests库(),以使事情变得更简单。同样的问题。那么服务器端呢?HTTP 500是服务器端的范围代码,所以yesSomeone说“64k对任何人都应该足够了”:)谷歌搜索这句话。谢谢你的回答。尝试gzip,传输编码;不走运。我会在本地分头进行。