检查URL是否存在且小于x字节而不消耗完整响应

时间:2015-04-13 13:48:57

标签: python django python-requests httplib2

我有一个用例,我想检查(在python / Django项目中)是否对GET请求的响应小于x字节,如果整个响应在{ {1}}秒,如果响应状态为200.正在测试的URL由最终用户提交。

一些限制: -

  1. y请求不可接受。仅仅因为某些服务器可能不包含HEAD或谎言,或只是阻止Content-Length个请求。
  2. 我不想使用完整的HEAD响应机构。想象一下,最终用户将URL提交到10GB文件...我的所有服务器带宽(和内存)都会被消耗掉。
  3. tl; dr:是否有任何python http api: -

    1. 接受整个交易的超时。 (我认为httplib2会这样做)
    2. 响应状态为200(所有http库都执行此操作)
    3. 一旦收到GET字节,就会终止请求(可能是RST),以避免带宽饥饿。
    4. 这里的x可能是KB的顺序,x将是几秒钟。

1 个答案:

答案 0 :(得分:2)

您可以从返回的对象中打开urllibread(x+1)中的网址。如果返回的字符串的长度为x+1,则资源大于x。然后在对象上调用close()以关闭连接,即终止请求。在最坏的情况下,这将填补操作系统的TCP缓冲区,这是你无法避免的;通常情况下,这不应超过x以上的几KB。

如果您进一步向请求添加Range header,则理智的服务器将在x+1字节后自行关闭连接。请注意,如果文件太小,这会将回复代码更改为206 Partial Content416 Requested range not satisfiable。不支持此服务器的服务器将忽略标头,因此这应该是一种安全措施。