这就是问题所在。
给定url * http://www.example.com *,我们可以读取页面的前N个字节吗?
- 使用wget,我们可以下载整个页面。
- 使用curl,有-r,0-499指定前500个字节。似乎解决了这个问题。
- 您还应该注意,许多HTTP/1.1服务器没有启用此功能,因此当您尝试获取范围时,您将获得整个文档。
- 在python中使用urlib。类似的问题here,但根据Konstantin的评论,这是真的吗?
- 上次我尝试这种技术失败了,因为实际上不可能从HTTP服务器只读取指定数量的数据,即您隐式读取所有HTTP响应,然后才读取其中的前N个字节。所以最终您最终下载了整个1Gb恶意响应。*
因此,问题是我们如何在实践中从HTTP服务器读取前N个字节?
问候和感谢
6条答案
按热度按时间r6l8ljro1#
你可以通过下面的curl命令在本机完成它(不需要下载整个文档)。根据curl手册页:
RANGES HTTP 1.1引入了byte-ranges。使用这个,客户端可以请求只获取指定文档的一个或多个子部分。
curl
通过-r
标志支持这一点。它对我来说甚至可以使用部署到GigaSpaces的Java Web应用程序。
gpfsuwkq2#
或
应该做
此外,还有一些更简单的实用程序,可能具有更广泛的可用性,如
或者
kgqe7b3p3#
您还应该知道,许多HTTP/1.1服务器没有启用此功能,因此当您试图获取范围时,您将获得整个文档。
你将不得不得到整个网络无论如何,所以你可以得到网络与 curl 和管道它的头部,例如。
水头
c,--bytes=[-]N打印每个文件的前N个字节;以'-'开头,打印每个文件的最后N个字节以外的所有字节
yks3o0rb4#
我来这里寻找一种方法来计算服务器的处理时间,我想我可以通过告诉curl在1字节或其他时间后停止下载来测量。
对我来说,更好的解决方案是执行HEAD请求,因为这通常会让服务器正常处理请求,但不会返回任何响应体:
b09cbbtk5#
不完全是Linux命令,但可以使用PHP脚本和
file_get_contents
函数(docs here),如下所示。上面的脚本只提取从位置0开始的前1000个字节,并终止任何进一步的下载。
然后,可以像
php script.php
一样执行Linux命令,假设上述脚本保存到script.php
文件。对于POST请求,可以找到here示例。
xxe27gdn6#
建立一个套接字连接。读取你想要的字节。关闭,你就完成了。