我正在创建一个请求对象(my_request)并从中获取响应。
if params[:method].upcase == 'GET'
my_request = Net::HTTP::Get.new('/' + params[:url])
elsif params[:method].upcase == 'POST'
my_request = Net::HTTP::Post.new('/' + params[:url])
elsif params[:method].upcase == 'PUT'
my_request = Net::HTTP::Put.new('/' + params[:url])
elsif params[:method].upcase == 'DELETE'
my_request = Net::HTTP::Delete.new('/' + params[:url])
end
response = http.request(my_request)
我想获取my_request将发出请求的确切网址。我试过'fullpath'和original_url,但它们都没有用。
有什么想法吗?
答案 0 :(得分:1)
Net::HTTP
个类没有fullpath
或original_url
方法或等效方法。它们继承自Net::HTTP::GenericRequest,没有这种方法。
相反,您应该使用path
方法。 Net::HTTP
次请求不会存储主机名,因此如果您要发出有效请求,则需要包含完整的主机名,而不仅仅是路径。
# Good: complete path
request = Net::HTTP::Get.new('http://example.com/about')
request.path # => 'http://example.com/about'
http.request(request) # => Success
# Bad: incomplete path
request = Net::HTTP::Get.new('/about')
request.path # => '/about'
http.request(request) # => Error
另外,如果它是我的,我会重构你的代码看起来更像这样:
url = "http://hostname.com/" + params[:url]
request = case params[:method].upcase
when 'GET' then Net::HTTP::Get.new(url)
when 'POST' then Net::HTTP::Post.new(url)
when 'PUT' then Net::HTTP::Put.new(url)
when 'DELETE' then Net::HTTP::Delete.new(url)
end
http.request(request)