class Patron::Response

Represents the response from the HTTP server.

def charset_regex

def charset_regex
  /(?:charset|encoding)="?([a-z0-9-]+)"?/i
end

def convert_to_default_encoding!(str)

def convert_to_default_encoding!(str)
  if str.respond_to?(:encode) && Encoding.default_internal
    str.force_encoding(charset).encode!(Encoding.default_internal)
  end
end

def determine_charset(header_data, body)

def determine_charset(header_data, body)
  header_data.match(charset_regex) || (body && body.match(charset_regex))
  charset = $1
  validate_charset(charset) ? charset : nil
end

def error?

Returns:
  • (Boolean) -
def error?
  status >= 400
end

def initialize(url, status, redirect_count, header_data, body, default_charset = nil)

def initialize(url, status, redirect_count, header_data, body, default_charset = nil)
  # Don't let a response clear out the default charset, which would cause encoding to fail
  default_charset = "ASCII-8BIT" unless default_charset
  @url            = url
  @status         = status
  @redirect_count = redirect_count
  @body           = body
  @charset        = determine_charset(header_data, body) || default_charset
  [url, header_data].each do |attr|
    convert_to_default_encoding!(attr)
  end
  parse_headers(header_data)
  if @headers["Content-Type"] && @headers["Content-Type"][0, 5] == "text/"
    convert_to_default_encoding!(@body)
  end
end

def inspect

Overridden so that the output is shorter and there is no response body printed
def inspect
  # Avoid spamming the console with the header and body data
  "#<Patron::Response @status_line='#{@status_line}'>"
end

def ok?

Returns:
  • (Boolean) -
def ok?
  !error?
end

def parse_headers(header_data)

Called by the C code to parse and set the headers
def parse_headers(header_data)
  @headers = {}
  lines = header_data.split("\r\n")
  @status_line = lines.shift
  lines.each do |line|
    break if line.empty?
    hdr, val = line.split(":", 2)
    val.strip! unless val.nil?
    if @headers.key?(hdr)
      @headers[hdr] = [@headers[hdr]] unless @headers[hdr].kind_of? Array
      @headers[hdr] << val
    else
      @headers[hdr] = val
    end
  end
end

def validate_charset(charset)

def validate_charset(charset)
  charset && Encoding.find(charset) && true
rescue ArgumentError
  false
end