class Pincers::Http::Session
Constants
- DEFAULT_HEADERS
Attributes
headers[R]
proxy_addr[RW]
proxy_password[RW]
proxy_port[RW]
proxy_user[RW]
redirect_limit[RW]
ssl_cert[RW]
ssl_key[RW]
Public Class Methods
new(_other = nil)
click to toggle source
# File lib/pincers/http/session.rb, line 17 def initialize(_other = nil) if _other @headers = _other.headers.clone @cookie_jar = _other.cookie_jar.copy @proxy_addr = _other.proxy_addr @proxy_port = _other.proxy_port @redirect_limit = _other.redirect_limit @ssl_cert = _other.ssl_cert @ssl_key = _other.ssl_key else @headers = DEFAULT_HEADERS @cookie_jar = CookieJar.new @redirect_limit = 10 end end
Public Instance Methods
clone()
click to toggle source
# File lib/pincers/http/session.rb, line 49 def clone self.class.new self end
perform(_request)
click to toggle source
# File lib/pincers/http/session.rb, line 58 def perform(_request) perform_recursive _request, @redirect_limit end
proxy=(_value)
click to toggle source
# File lib/pincers/http/session.rb, line 33 def proxy=(_value) if _value @proxy_addr, @proxy_port = _value.split ':' else @proxy_addr, @proxy_port = [nil, nil] end end
proxy_auth=(_value)
click to toggle source
# File lib/pincers/http/session.rb, line 41 def proxy_auth=(_value) if _value @proxy_user, @proxy_password = _value.split ':' else @proxy_user, @proxy_password = [nil, nil] end end
sync(_other)
click to toggle source
# File lib/pincers/http/session.rb, line 53 def sync(_other) @headers.merge! _other.headers _other.cookie_jar.cookies.each { |c| cookie_jar.set c } end
Private Instance Methods
connect(_uri)
click to toggle source
# File lib/pincers/http/session.rb, line 97 def connect(_uri) conn = Net::HTTP.new( _uri.host, _uri.port || 80, proxy_addr, proxy_port, proxy_user, proxy_password ) conn.use_ssl = true if _uri.scheme == 'https' if ssl_cert conn.cert = ssl_cert conn.key = ssl_key end conn.verify_mode = OpenSSL::SSL::VERIFY_NONE conn end
copy_headers(_request, _headers)
click to toggle source
# File lib/pincers/http/session.rb, line 122 def copy_headers(_request, _headers) _headers.keys.each { |k| _request[k] = _headers[k] } end
handle_error_response(_http_response)
click to toggle source
# File lib/pincers/http/session.rb, line 118 def handle_error_response(_http_response) raise RequestError.new _http_response end
perform_recursive(_request, _limit)
click to toggle source
# File lib/pincers/http/session.rb, line 64 def perform_recursive(_request, _limit) raise MaximumRedirectsError.new if _limit == 0 uri = _request.uri path = uri.request_uri.empty? ? '/' : uri.request_uri http_request = _request.native_type.new path http_request.body = _request.data copy_headers http_request, @headers copy_headers http_request, _request.headers set_cookies http_request, uri http_response = connect(uri).request(http_request) update_cookies(uri, http_response) case http_response when Net::HTTPSuccess Response.new(uri, http_response) when Net::HTTPRedirection location = Utils.parse_uri(http_response['location']) location = URI.join(uri, location) if location.relative? new_request = _request.clone_for_redirect(location, repeating_redirect?(http_response)) perform_recursive(new_request, _limit - 1) else handle_error_response Response.new(uri, http_response) end end
repeating_redirect?(_req)
click to toggle source
# File lib/pincers/http/session.rb, line 93 def repeating_redirect?(_req) ["307", "308"].include?(_req.code) end