Class: EventMachine::Protocols::HttpClient2

Inherits:
Connection
  • Object
show all
Includes:
LineText2
Defined in:
lib/em/protocols/httpclient2.rb

Overview

Note: This class is deprecated and will be removed. Please use EM-HTTP-Request instead.

Usage

EM.run{
  conn = EM::Protocols::HttpClient2.connect 'google.com', 80

  req = conn.get('/')
  req.callback{ |response|
    p(response.status)
    p(response.headers)
    p(response.content)
  }
}

Defined Under Namespace

Classes: Request

Constant Summary

Constants included from LineText2

LineText2::MaxBinaryLength

Instance Attribute Summary

Attributes inherited from Connection

#signature

Class Method Summary collapse

Instance Method Summary collapse

Methods included from LineText2

#receive_data, #receive_end_of_binary_data, #set_binary_mode, #set_delimiter, #set_line_mode, #set_text_mode

Methods inherited from Connection

#associate_callback_target, #close_connection, #close_connection_after_writing, #comm_inactivity_timeout, #comm_inactivity_timeout=, #detach, #error?, #get_cipher_bits, #get_cipher_name, #get_cipher_protocol, #get_idle_time, #get_outbound_data_size, #get_peer_cert, #get_peername, #get_pid, #get_proxied_bytes, #get_sni_hostname, #get_sock_opt, #get_sockname, #get_status, new, #notify_readable=, #notify_readable?, #notify_writable=, #notify_writable?, #pause, #paused?, #pending_connect_timeout, #pending_connect_timeout=, #proxy_completed, #proxy_incoming_to, #proxy_target_unbound, #receive_data, #reconnect, #resume, #send_data, #send_datagram, #send_file_data, #set_sock_opt, #ssl_handshake_completed, #ssl_verify_peer, #start_tls, #stop_proxying, #stream_file_data

Constructor Details

#initializeHttpClient2

Returns a new instance of HttpClient2



46
47
48
49
50
51
52
# File 'lib/em/protocols/httpclient2.rb', line 46

def initialize
  warn "HttpClient2 is deprecated and will be removed. EM-Http-Request should be used instead."

  @authorization = nil
  @closed = nil
  @requests = nil
end

Class Method Details

.connect(*args) ⇒ Object

Make a connection to a remote HTTP server. Can take either a pair of arguments (which will be interpreted as a hostname/ip-address and a port), or a hash. If the arguments are a hash, then supported values include:

:host => a hostname or ip-address
:port => a port number
:ssl => true to enable ssl


246
247
248
249
250
251
252
253
254
255
256
257
258
# File 'lib/em/protocols/httpclient2.rb', line 246

def self.connect *args
  if args.length == 2
    args = {:host=>args[0], :port=>args[1]}
  else
    args = args.first
  end

  h,prt,ssl = args[:host], Integer(args[:port]), (args[:tls] || args[:ssl])
  conn = EM.connect( h, prt, self )
  conn.start_tls if ssl
  conn.set_default_host_header( h, prt, ssl )
  conn
end

Instance Method Details

#connection_completedObject



309
310
311
312
# File 'lib/em/protocols/httpclient2.rb', line 309

def connection_completed
  super
  @connected.succeed
end

#get(args) ⇒ Object

Get a url

req = conn.get(:uri => '/')
req.callback{|response| puts response.content }


265
266
267
268
269
270
271
# File 'lib/em/protocols/httpclient2.rb', line 265

def get args
  if args.is_a?(String)
    args = {:uri=>args}
  end
  args[:verb] = "GET"
  request args
end

#pop_requestObject

– Called by a Request object when it completes.



366
367
368
# File 'lib/em/protocols/httpclient2.rb', line 366

def pop_request
  @requests.pop
end

#post(args) ⇒ Object

Post to a url

req = conn.post('/data')
req.callback{|response| puts response.content }

– XXX there's no way to supply a POST body.. wtf?



279
280
281
282
283
284
285
# File 'lib/em/protocols/httpclient2.rb', line 279

def post args
  if args.is_a?(String)
    args = {:uri=>args}
  end
  args[:verb] = "POST"
  request args
end

#post_initObject



303
304
305
306
# File 'lib/em/protocols/httpclient2.rb', line 303

def post_init
  super
  @connected = EM::DefaultDeferrable.new
end

#receive_binary_data(text) ⇒ Object



358
359
360
# File 'lib/em/protocols/httpclient2.rb', line 358

def receive_binary_data text
  @requests.last.receive_text text
end

#receive_line(ln) ⇒ Object



348
349
350
351
352
353
354
355
# File 'lib/em/protocols/httpclient2.rb', line 348

def receive_line ln
  if req = @requests.last
    req.receive_line ln
  else
    p "??????????"
    p ln
  end
end

#request(args) ⇒ Object



334
335
336
337
338
339
340
341
342
343
344
345
# File 'lib/em/protocols/httpclient2.rb', line 334

def request args
  args[:host_header] = @host_header unless args.has_key?(:host_header)
  args[:authorization] = @authorization unless args.has_key?(:authorization)
  r = Request.new self, args
  if @closed
    r.fail
  else
    (@requests ||= []).unshift r
    @connected.callback {r.send_request}
  end
  r
end

#set_default_host_header(host, port, ssl) ⇒ Object

– Compute and remember a string to be used as the host header in HTTP requests unless the user overrides it with an argument to #request.



293
294
295
296
297
298
299
# File 'lib/em/protocols/httpclient2.rb', line 293

def set_default_host_header host, port, ssl
  if (ssl and port != 443) or (!ssl and port != 80)
    @host_header = "#{host}:#{port}"
  else
    @host_header = host
  end
end

#unbindObject

– All pending requests, if any, must fail. We might come here without ever passing through connection_completed in case we can't connect to the server. We'll also get here when the connection closes (either because the server closes it, or we close it due to detecting an internal error or security violation). In either case, run down all pending requests, if any, and signal failure on them.

Set and remember a flag (@closed) so we can immediately fail any subsequent requests.



327
328
329
330
331
# File 'lib/em/protocols/httpclient2.rb', line 327

def unbind
  super
  @closed = true
  (@requests || []).each {|r| r.fail}
end