Class: GData::HTTP::DefaultService

Inherits:
Object
  • Object
show all
Defined in:
lib/gdata/http/default_service.rb

Overview

This is the default implementation of the HTTP layer that uses Net::HTTP. You could roll your own if you have different requirements or cannot use Net::HTTP for some reason.

Instance Method Summary collapse

Instance Method Details

#make_request(request) ⇒ Object

Take a GData::HTTP::Request, execute the request, and return a GData::HTTP::Response object.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/gdata/http/default_service.rb', line 30

def make_request(request)
  url = URI.parse(request.url)
  proxy = URI::parse((url.scheme == 'https' ? ENV['https_proxy'] : ENV['http_proxy']) || '')
  http = Net::HTTP.new(url.host, url.port, proxy.host, proxy.port)
  http.use_ssl = (url.scheme == 'https')
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  
  case request.method
  when :get
    req = Net::HTTP::Get.new(url.request_uri)
  when :put
    req = Net::HTTP::Put.new(url.request_uri)
  when :post
    req = Net::HTTP::Post.new(url.request_uri)
  when :delete
    req = Net::HTTP::Delete.new(url.request_uri)
  else
    raise ArgumentError, "Unsupported HTTP method specified."
  end
  
  case request.body
  when String
    req.body = request.body
  when Hash
    req.set_form_data(request.body)
  when File
    req.body_stream = request.body
    request.chunked = true
  when GData::HTTP::MimeBody
    req.body_stream = request.body
    request.chunked = true
  else
    req.body = request.body.to_s
  end
  
  request.headers.each do |key, value|
    req[key] = value
  end
  
  request.calculate_length!
  
  res = http.request(req)
  
  response = Response.new
  response.body = res.body
  response.headers = Hash.new
  res.each do |key, value|
    response.headers[key] = value
  end
  response.status_code = res.code.to_i
  return response
end