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 the following code, but the server is throwing back a response saying that "it is a request that the server could not understand" (the server is Apache).
require 'net/http'
require 'uri'
#with @address, @port, @path all defined elsewhere
httpcall = Net::HTTP.new(@address, @port)
headers = {
'Range' => 'bytes=1000-'
}
resp, data = httpcall.get2(@path, headers)
- Is there a better way to define headers in Ruby?
- Does anyone know why this would be failing against Apache? If I do a get in a browser to
http://[address]:[port]/[path]
I get the data I am seeking without issue.
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:
Also, note that in Ruby 1.8+, what you are almost certainly running,
Net::HTTP#get2
returns a singleHTTPResponse
object, not aresp, data
pair.Created a solution that worked for me (worked very well) - this example getting a range offset: