这是一个问题。
鉴于网址 http://www.example.com ,我们可以读取页面中的前N个字节吗?
使用 curl ,有-r,0-499指定前500个字节。似乎解决了这个问题。
您还应该知道许多HTTP / 1.1服务器没有启用此功能,因此当您尝试获取范围时,您将获得整个文档。
在python中使用 urlib 。类似的问题here,但根据康斯坦丁的评论,这是真的吗?
上次我尝试这种技术时失败了,因为实际上不可能只从HTTP服务器读取指定数量的数据,即你隐式读取所有HTTP响应,然后才读出它的前N个字节。所以最后你最终下载了整个1Gb恶意响应。
所以问题是我们如何在实践中从HTTP服务器读取前N个字节?
问候&感谢
答案 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>