How to make an HTTP GET with modified headers?

后端 未结 2 1942
执念已碎
执念已碎 2020-12-01 09:46

What is the best way to make an HTTP GET request in Ruby with modified headers?

I want to get a range of bytes from the end of a log file and have been toying with t

相关标签:
2条回答
  • 2020-12-01 10:18

    If you have access to the server logs, try comparing the request from the browser with the one from Ruby and see if that tells you anything. If this isn't practical, fire up Webrick as a mock of the file server. Don't worry about the results, just compare the requests to see what they are doing differently.

    As for Ruby style, you could move the headers inline, like so:

    httpcall = Net::HTTP.new(@address, @port)
    
    resp, data = httpcall.get2(@path, 'Range' => 'bytes=1000-')
    

    Also, note that in Ruby 1.8+, what you are almost certainly running, Net::HTTP#get2 returns a single HTTPResponse object, not a resp, data pair.

    0 讨论(0)
  • 2020-12-01 10:29

    Created a solution that worked for me (worked very well) - this example getting a range offset:

    require 'uri'
    require 'net/http'
    
    size = 1000 #the last offset (for the range header)
    uri = URI("http://localhost:80/index.html")
    http = Net::HTTP.new(uri.host, uri.port)
    headers = {
        'Range' => "bytes=#{size}-"
    }
    path = uri.path.empty? ? "/" : uri.path
    
    #test to ensure that the request will be valid - first get the head
    code = http.head(path, headers).code.to_i
    if (code >= 200 && code < 300) then
    
        #the data is available...
        http.get(uri.path, headers) do |chunk|
            #provided the data is good, print it...
            print chunk unless chunk =~ />416.+Range/
        end
    end
    
    0 讨论(0)
提交回复
热议问题