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?
-
(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
def inspect # Avoid spamming the console with the header and body data "#<Patron::Response @status_line='#{@status_line}'>" end
def ok?
-
(Boolean)
-
def ok? !error? end
def parse_headers(header_data)
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