gpt4 book ai didi

ruby-on-rails - Ruby NET::HTTP 在主体之前读取 header (没有 HEAD 请求)?

转载 作者:数据小太阳 更新时间:2023-10-29 06:50:11 25 4
gpt4 key购买 nike

我使用 Net::HTTP 和 Ruby 来抓取 URL。

我不想抓取流式音频,例如:http://listen2.openstream.co/334

其实我只想抓取Html内容,所以没有pdfs、video、txt..

现在,我将 open_timeout 和 read_timeout 都设置为 10,所以即使我抓取这些流式音频页面,它们也会超时。

url = 'http://listen2.openstream.co/334'
path = uri.path

req= Net::HTTP::Get.new(path, {'Accept' => '*/*', 'Content-Type' => 'text/plain; charset=utf-8', 'Connection' => 'keep-alive','Accept-Encoding' => 'Identity'})

uri = Addressable::URI.parse(url)

resp = Net::HTTP.start(uri.host, uri.inferred_port) do |httpRequest|
httpRequest.open_timeout = 10
httpRequest.read_timeout = 10
#how can I read the headers here before it's streaming the body and then exit b/c the content type is audio?
httpRequest.request(req)
end

但是,有没有一种方法可以在我读取 http 响应的正文之前检查 header 以查看它是否是音频?我想在不发送单独的 HEAD 请求的情况下这样做。

最佳答案

net/http 支持流式传输,您可以使用它在正文之前读取 header 。

代码示例,

url = URI('http://stackoverflow.com/questions/41306082/ruby-nethttp-read-the-header-before-the-body-without-head-request')

Net::HTTP.start(url.host, url.port) do |http|
request = Net::HTTP::Get.new(url)
http.request(request) do |response|

# check headers here, body has not yet been read
# then call read_body or just body to read the body

if true
response.read_body do |chunk|
# process body chunks here
end
end
end
end

关于ruby-on-rails - Ruby NET::HTTP 在主体之前读取 header (没有 HEAD 请求)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41306082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com