Class: EventMachine::Protocols::HttpClient2
- Inherits:
-
Connection
- Object
- Connection
- EventMachine::Protocols::HttpClient2
- Includes:
- LineText2
- Defined in:
- lib/protocols/httpcli2.rb
Defined Under Namespace
Classes: Request
Constant Summary
Constants included from LineText2
LineText2::MaxBinaryLength, LineText2::MaxLineLength
Instance Attribute Summary
Attributes inherited from Connection
Class Method Summary collapse
-
.connect(*args) ⇒ Object
Make a connection to a remote HTTP server.
Instance Method Summary collapse
- #connection_completed ⇒ Object
- #get(args) ⇒ Object
-
#pop_request ⇒ Object
– Called by a Request object when it completes.
- #post(args) ⇒ Object
- #post_init ⇒ Object
- #receive_binary_data(text) ⇒ Object
- #receive_line(ln) ⇒ Object
- #request(args) ⇒ Object
-
#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.
-
#unbind ⇒ Object
– All pending requests, if any, must fail.
Methods included from LineText2
#receive_data, #set_delimiter, #set_line_mode, #set_text_mode
Methods inherited from Connection
#close_connection, #close_connection_after_writing, #comm_inactivity_timeout, #comm_inactivity_timeout=, #error?, #get_outbound_data_size, #get_peername, #get_pid, #get_status, #initialize, new, #receive_data, #reconnect, #send_data, #send_datagram, #send_file_data, #set_comm_inactivity_timeout, #start_tls, #stream_file_data
Constructor Details
This class inherits a constructor from EventMachine::Connection
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
– TODO, support optional encryption arguments like :ssl
218 219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/protocols/httpcli2.rb', line 218 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 ) # TODO, start_tls if necessary conn.set_default_host_header( h, prt, ssl ) conn end |
Instance Method Details
#connection_completed ⇒ Object
251 252 253 254 |
# File 'lib/protocols/httpcli2.rb', line 251 def connection_completed super @connected.succeed end |
#get(args) ⇒ Object
275 276 277 278 279 280 281 |
# File 'lib/protocols/httpcli2.rb', line 275 def get args if args.is_a?(String) args = {:uri=>args} end args[:verb] = "GET" request args end |
#pop_request ⇒ Object
– Called by a Request object when it completes.
320 321 322 |
# File 'lib/protocols/httpcli2.rb', line 320 def pop_request @requests.pop end |
#post(args) ⇒ Object
283 284 285 286 287 288 289 |
# File 'lib/protocols/httpcli2.rb', line 283 def post args if args.is_a?(String) args = {:uri=>args} end args[:verb] = "POST" request args end |
#post_init ⇒ Object
246 247 248 249 |
# File 'lib/protocols/httpcli2.rb', line 246 def post_init super @connected = EM::DefaultDeferrable.new end |
#receive_binary_data(text) ⇒ Object
313 314 315 |
# File 'lib/protocols/httpcli2.rb', line 313 def receive_binary_data text @requests.last.receive_text text end |
#receive_line(ln) ⇒ Object
304 305 306 307 308 309 310 311 312 |
# File 'lib/protocols/httpcli2.rb', line 304 def receive_line ln if req = @requests.last req.receive_line ln else p "??????????" p ln end end |
#request(args) ⇒ Object
291 292 293 294 295 296 297 298 299 300 301 302 |
# File 'lib/protocols/httpcli2.rb', line 291 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.
237 238 239 240 241 242 243 |
# File 'lib/protocols/httpcli2.rb', line 237 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 |
#unbind ⇒ Object
– 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.
268 269 270 271 272 |
# File 'lib/protocols/httpcli2.rb', line 268 def unbind super @closed = true (@requests || []).each {|r| r.fail} end |