2015-10-12 123 views
0

我怎麼會仿效Ruby腳本捲曲-r(範圍)的行爲下載文件的特定部分,而無需使用反引號或其他方法來運行卷曲二進制?從HTTP服務器

我知道如何從一個文件的開頭開始並保存塊一個文件,但我怎麼會在遠程文件的特定部分上啓動,然後下載X字節?

說文件是1000個字節長,我想開始在60個字節,並從該點下載20個字節(80結束)。這將如何完成?

有沒有解決捲曲這是跨平臺的,或者提供這種支持另一顆寶石寶石包裝?或者,這可能與標準的open-uri或net :: http庫?

謝謝!

+0

歡迎堆棧溢出。與其詢問關於遇到的問題的具體問題,不如問你如何做,而不向我們展示你所嘗試過的。有很多生成HTTP請求的方法,但是它們都使用不同的方式來指定所需的頭文件,並且沒有關於正在做什麼的詳細信息,很難找出答案。您還需要針對非現場資源提出建議。請閱讀「[問]」。 –

+0

您可能誤解了大部分問題,或將其解釋得很差。具體的問題是如何複製curl發送的頭文件。此外,我還要求圖書館提供此功能,或者如果標準庫提供了這些功能。許多其他職位免費推薦寶石作爲特定問題的答案。我沒有具體要求第三方資源或鏈接。如果你不知道答案,就沒有必要投票結束它。 –

+0

其他問題推薦的東西經常被引用爲重複它的理由,然而在規則實施之前它們往往是老問題,或者人們沒有按照他們應該做出的迴應,通常是因爲他們沒有意識到堆棧溢出的範圍。問題依然存在,要求提出的建議是脫離主題的,這是基於社區的協議。請參閱https://stackoverflow.com/help/on-topic中的#4。 –

回答

1

您可以使用任何允許您設置請求標頭的庫(所有curl -r確實設置爲Range標頭)來完成此操作,該應該幾乎是任何HTTP庫。淨:: HTTP,它的一部分,具有set_range便利方法,該方法作爲參數是單個範圍對象(例如60...80)或起始索引和長度:

require "net/http" 
require "uri" 

url = URI.parse("http://example.com/foo") 
req = Net::HTTP::Get.new(url.path) 

req.set_range(60, 20) 

res = Net::HTTP.new(url.host, url.port).start do |http| 
    http.request(req) 
end 
puts res.body