我有一个用例,我想检查(在python / Django项目中)是否对GET
请求的响应小于x
字节,如果整个响应在{ {1}}秒,如果响应状态为200.正在测试的URL由最终用户提交。
一些限制: -
y
请求不可接受。仅仅因为某些服务器可能不包含HEAD
或谎言,或只是阻止Content-Length
个请求。HEAD
响应机构。想象一下,最终用户将URL提交到10GB文件...我的所有服务器带宽(和内存)都会被消耗掉。tl; dr:是否有任何python http api: -
GET
字节,就会终止请求(可能是RST
),以避免带宽饥饿。这里的x
可能是KB的顺序,x
将是几秒钟。
答案 0 :(得分:2)
您可以从返回的对象中打开urllib
和read(x+1)
中的网址。如果返回的字符串的长度为x+1
,则资源大于x
。然后在对象上调用close()
以关闭连接,即终止请求。在最坏的情况下,这将填补操作系统的TCP缓冲区,这是你无法避免的;通常情况下,这不应超过x
以上的几KB。
如果您进一步向请求添加Range
header,则理智的服务器将在x+1
字节后自行关闭连接。请注意,如果文件太小,这会将回复代码更改为206 Partial Content
或416 Requested range not satisfiable
。不支持此服务器的服务器将忽略标头,因此这应该是一种安全措施。