2014-04-30 20 views
2

我正在使用Typhoeus和十幾個請求中的九頭蛇隊列。如何使用Typhoeus中止on_body回調中的當前請求

我正在使用on_body回調來傳輸響應。

什麼是放棄此回調中的當前請求(即達到最大文件大小...)的最佳方式,而不中止隊列中的所有其他請求?

hydra = Typhoeus::Hydra.hydra 

urls.each do |url| 
    request = Typhoeus::Request.new(url, followlocation: true, timeout: 5, connecttimeout: 5) 
    request.on_body do |chunk, response| 
    # 
    # How to conditionally abort the request here ? 
    #   
    end 

    hydra.queue request 
end 

hydra.run 

回答

3

目前沒有辦法。根據http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTWRITEFUNCTION這將足以返回一個無效的大小。但是Typhoeus還沒有這個選項,因爲回調本身已經被封裝了,它總是返回正確的大小:https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/callbacks.rb#L37-48

編輯:Ethon 0.7.1能夠中止on_body回調中的請求:https://github.com/typhoeus/ethon/commit/6117872004c9ed1dac0ac15542dffc10177d8eae

+0

感謝您的回答!我的問題是,我使用Typhoeus和一個隊列來抓取一些我無法控制內容的URL。如果其中一個URL最終是一個非常大的文件,我希望儘快放棄,而不必將其寫入光盤。處理這個問題的最好方法是什麼? –

+0

我會合並一個具有特殊返回值以中止請求的更改。如:__ abort_request。這似乎是最簡單的方法。 – i0rek

+0

我發佈了一個Ethon版本,可以放棄在飛行中的請求。 https://github.com/typhoeus/ethon/commit/6117872004c9ed1dac0ac15542dffc10177d8eae – i0rek

相關問題