是否可以使用Linux命令从HTTP服务器只读取前N个字节?

时间:2011-04-26 07:21:44

标签: linux http url command

这是一个问题。

鉴于网址 http://www.example.com ,我们可以读取页面中的前N个字节吗?

  • 使用 wget ,我们可以下载整个页面。
  • 使用 curl ,有-r,0-499指定前500个字节。似乎解决了这个问题。

      

    您还应该知道许多HTTP / 1.1服务器没有启用此功能,因此当您尝试获取范围时,您将获得整个文档。

  • 在python中使用 urlib 。类似的问题here,但根据康斯坦丁的评论,这是真的吗?

      

    上次我尝试这种技术时失败了,因为实际上不可能只从HTTP服务器读取指定数量的数据,即你隐式读取所有HTTP响应,然后才读出它的前N个字节。所以最后你最终下载了整个1Gb恶意响应。

所以问题是我们如何在实践中从HTTP服务器读取前N个字节?

问候&感谢

5 个答案:

答案 0 :(得分:16)

您可以通过下一个curl命令本地执行此操作(无需下载整个文档)。根据culr手册页:

  

的取值范围       HTTP 1.1引入了字节范围。使用此方法,客户端可以请求仅获取指定文档的一个或多个子部分。 curl   使用-r标志支持此功能。

Get the first 100 bytes of a document:
    curl -r 0-99 http://www.get.this/

Get the last 500 bytes of a document:  
    curl -r -500 http://www.get.this/

`curl` also supports simple ranges for FTP files as well.
Then you can only specify start and stop position.

Get the first 100 bytes of a document using FTP:
    curl -r 0-99 ftp://www.get.this/README

即使部署到GigaSpaces的Java Web应用程序,它也适用于我。

答案 1 :(得分:8)

curl <url> | head -c 499

curl <url> | dd bs=1 count=499

应该

此外,还有更简单的工具,可能还有像博拉的可用性

    netcat host 80 <<"HERE" | dd count=499 of=output.fragment
GET /urlpath/query?string=more&bloddy=stuff

HERE

或者

GET /urlpath/query?string=more&bloddy=stuff

答案 2 :(得分:2)

  

你也应该意识到很多   HTTP / 1.1服务器没有这个   启用功能,这样当你   试图获得一个范围,你会改为   得到整个文件。

无论如何你必须得到整个网络,所以你可以使用curl来获取网络并将其管道化。例如。

  

     

c, - bytes = [ - ] N.       打印每个文件的前N个字节;带有' - ',打印全部   但是每个文件的最后N个字节

答案 3 :(得分:0)

建立套接字连接。读取您想要的字节数。关闭,你就完成了。

答案 4 :(得分:0)

我来这里是为了寻找一种时间来处理服务器的处理时间,我认为我可以通过告诉curl在1个字节左右停止下载后进行测量。

对我来说,更好的解决方案是执行HEAD请求,因为这通常使服务器可以正常处理请求,但不返回任何响应主体:

time curl --head <URL>