簡體   English   中英

是否可以使用Linux命令從HTTP服務器只讀取前N個字節?

[英]Is it possible to read only first N bytes from the HTTP server using Linux command?

這是個問題。

給定網址http://www.example.com ,我們可以讀取頁面外的前N個字節嗎?

  • 使用wget ,我們可以下載整個頁面。
  • 使用curl ,有-r,0-499指定前500個字節。 似乎解決了這個問題。

    您還應該知道許多HTTP / 1.1服務器沒有啟用此功能,因此當您嘗試獲取范圍時,您將獲得整個文檔。

  • 在python中使用urlib 類似的問題在這里 ,但根據康斯坦丁的評論,這是真的嗎?

    上次我嘗試這種技術時失敗了,因為實際上不可能只從HTTP服務器讀取指定數量的數據,即你隱式讀取所有HTTP響應,然后只讀出它的前N個字節。 所以最后你最終下載了整個1Gb惡意響應。

所以問題是我們如何在實踐中從HTTP服務器讀取前N個字節?

問候和謝謝

您可以通過下一個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應用程序,它也適用於我。

curl <url> | head -c 499

要么

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

應該做

還有更簡單的工具,可能有borader可用性

    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

您還應該知道許多HTTP / 1.1服務器沒有啟用此功能,因此當您嘗試獲取范圍時,您將獲得整個文檔。

無論如何,你必須得到整個網絡,所以你可以使用curl獲取網絡並將其管道化。

c, - byte = [ - ] N打印每個文件的前N個字節; 使用前導' - ',打印除了每個文件的最后N個字節之外的所有字節

我來到這里尋找一種方法來計算服務器的處理時間,我認為我可以通過告訴curl在1個字節之后停止下載來測量。

對我來說,更好的解決方案是做一個HEAD請求,因為這通常會讓服務器正常處理請求,但不會返回任何響應主體:

time curl --head <URL>

建立套接字連接。 讀取您想要的字節數。 關閉,你就完成了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM