Class: Puppeteer::HTTPResponse

Inherits:
Object
  • Object
show all
Includes:
IfPresent
Defined in:
lib/puppeteer/http_response.rb

Defined Under Namespace

Classes: InternalAccessor, Redirected, RemoteAddress, SecurityDetails

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from IfPresent

#if_present

Constructor Details

#initialize(client, request, response_payload, extra_info) ⇒ HTTPResponse

Returns a new instance of HTTPResponse.

Parameters:



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
# File 'lib/puppeteer/http_response.rb', line 38

def initialize(client, request, response_payload, extra_info)
  @client = client
  @request = request

  @body_loaded_promise = Async::Promise.new
  @remote_address = RemoteAddress.new(
    ip: response_payload['remoteIPAddress'],
    port: response_payload['remotePort'],
  )

  @status_text = parse_status_text_from_extra_info(extra_info) || response_payload['statusText']
  @url = request.url
  @from_disk_cache = !!response_payload['fromDiskCache']
  @from_service_worker = !!response_payload['fromServiceWorker']

  @status = extra_info ? extra_info['statusCode'] : response_payload['status']
  @headers = {}
  headers = extra_info ? extra_info['headers'] : response_payload['headers']
  headers.each do |key, value|
    @headers[key.downcase] = value
  end
  @security_details = if_present(response_payload['securityDetails']) do |security_payload|
    SecurityDetails.new(security_payload)
  end
  @timing = response_payload['timing']

  @internal = InternalAccessor.new(self)
end

Instance Attribute Details

#headersObject (readonly)

Returns the value of attribute headers.



69
70
71
# File 'lib/puppeteer/http_response.rb', line 69

def headers
  @headers
end

#internalObject (readonly)

Returns the value of attribute internal.



67
68
69
# File 'lib/puppeteer/http_response.rb', line 67

def internal
  @internal
end

#remote_addressObject (readonly)

Returns the value of attribute remote_address.



69
70
71
# File 'lib/puppeteer/http_response.rb', line 69

def remote_address
  @remote_address
end

#requestObject (readonly)

Returns the value of attribute request.



69
70
71
# File 'lib/puppeteer/http_response.rb', line 69

def request
  @request
end

#security_detailsObject (readonly)

Returns the value of attribute security_details.



69
70
71
# File 'lib/puppeteer/http_response.rb', line 69

def security_details
  @security_details
end

#statusObject (readonly)

Returns the value of attribute status.



69
70
71
# File 'lib/puppeteer/http_response.rb', line 69

def status
  @status
end

#status_textObject (readonly)

Returns the value of attribute status_text.



69
70
71
# File 'lib/puppeteer/http_response.rb', line 69

def status_text
  @status_text
end

#timingObject (readonly)

Returns the value of attribute timing.



69
70
71
# File 'lib/puppeteer/http_response.rb', line 69

def timing
  @timing
end

#urlObject (readonly)

Returns the value of attribute url.



69
70
71
# File 'lib/puppeteer/http_response.rb', line 69

def url
  @url
end

Instance Method Details

#bufferObject



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/puppeteer/http_response.rb', line 96

def buffer
  @body_loaded_promise.wait
  response = @request.client.send_message('Network.getResponseBody', requestId: @request.internal.request_id)
  if response['base64Encoded']
    Base64.decode64(response['body'])
  else
    response['body']
  end
rescue Puppeteer::Connection::ProtocolError => err
  if err.message.include?('No resource with given identifier found')
    raise Puppeteer::Error.new(
      'Could not load response body for this request. This might happen if the request is a preflight request.',
    )
  end
  raise
end

#frameObject



141
142
143
# File 'lib/puppeteer/http_response.rb', line 141

def frame
  @request.frame
end

#from_cache?Boolean

Returns:

  • (Boolean)


131
132
133
# File 'lib/puppeteer/http_response.rb', line 131

def from_cache?
  @from_disk_cache || @request.internal.from_memory_cache?
end

#from_service_worker?Boolean

Returns:

  • (Boolean)


136
137
138
# File 'lib/puppeteer/http_response.rb', line 136

def from_service_worker?
  @from_service_worker
end

#inspectObject



71
72
73
74
75
76
77
# File 'lib/puppeteer/http_response.rb', line 71

def inspect
  values = %i[remote_address url status status_text headers security_details request].map do |sym|
    value = instance_variable_get(:"@#{sym}")
    "@#{sym}=#{value}"
  end
  "#<Puppeteer::HTTPRequest #{values.join(' ')}>"
end

#jsonObject

Parameters:

  • json (Hash)


126
127
128
# File 'lib/puppeteer/http_response.rb', line 126

def json
  JSON.parse(text)
end

#ok?Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/puppeteer/http_response.rb', line 91

def ok?
  @status == 0 || (@status >= 200 && @status <= 299)
end

#textObject

Parameters:

  • text (String)


115
116
117
118
119
120
121
122
# File 'lib/puppeteer/http_response.rb', line 115

def text
  content = buffer
  content = content.dup.force_encoding('UTF-8')
  unless content.valid_encoding?
    raise Puppeteer::Error.new('Could not decode response body as UTF-8')
  end
  content
end