Exemplo n.º 1
0
 /**
  * Sends the given request to the remote host, read the response and 
  * returns an HTTP_Response2 instance.
  *
  * @param HTTP_Request2 $request The request to send
  *
  * @return HTTP_Response2
  * @throws HTTP_Connection_Exception
  */
 public function sendRequest(HTTP_Request2 $request)
 {
     $this->request = $request;
     if ($this->request->options['file'] !== null) {
         $this->handle = @fopen($this->request->options['file'], 'w');
         if (!$this->handle) {
             throw new HTTP_Connection_Exception('Unable to open file ' . $this->request->options['file']);
         }
     }
     // open connection and notify of the event
     $this->open();
     $this->request->state = HTTP_Request2::STATE_CONNECTED;
     $this->request->notify();
     // send the request and notify of the event
     // Adapters are responsible of sending the events:
     $this->send();
     $this->request->state = HTTP_Request2::STATE_REQUEST_SENT;
     $this->request->notify();
     // read response and notify of the event
     // Adapters are responsible of notifying of the following events in
     // their own implementation:
     // - HTTP_Request2::STATE_RESPONSE_HEADERS
     // - HTTP_Request2::STATE_RESPONSE_TICK
     $response = $this->receive();
     $this->request->state = HTTP_Request2::STATE_RESPONSE_RECEIVED;
     $this->request->notify();
     // close the connection only if needed and notify of the event
     if ($response->shouldClose()) {
         $this->close();
         $this->request->state = HTTP_Request2::STATE_DISCONNECTED;
         $this->request->notify();
     }
     return $response;
 }