コード例 #1
0
 public static function makeRequest(HttpRequest $request)
 {
     $requestUri = $request->getRequestUri()->getUri();
     // if the request is towards a file URL, return the response constructed
     // from file
     if (0 === strpos($requestUri, "file:///")) {
         return HttpResponse::fromFile($requestUri);
     }
     $httpResponse = new HttpResponse();
     $curlChannel = curl_init();
     curl_setopt($curlChannel, CURLOPT_URL, $requestUri);
     curl_setopt($curlChannel, CURLOPT_FOLLOWLOCATION, 1);
     curl_setopt($curlChannel, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($curlChannel, CURLOPT_TIMEOUT, 10);
     if ($request->getRequestMethod() === "POST") {
         curl_setopt($curlChannel, CURLOPT_POST, 1);
         curl_setopt($curlChannel, CURLOPT_POSTFIELDS, $request->getContent());
     }
     $basicAuthUser = $request->getBasicAuthUser();
     $basicAuthPass = $request->getBasicAuthPass();
     if (NULL !== $basicAuthUser) {
         $request->setHeader("Authorization", "Basic " . base64_encode($basicAuthUser . ":" . $basicAuthPass));
     }
     // Including HTTP headers in request
     $headers = $request->getHeaders(TRUE);
     if (!empty($headers)) {
         curl_setopt($curlChannel, CURLOPT_HTTPHEADER, $headers);
     }
     // Connect to SSL/TLS server, validate certificate and host
     if ($request->getRequestUri()->getScheme() === "https") {
         curl_setopt($curlChannel, CURLOPT_SSL_VERIFYPEER, 1);
         curl_setopt($curlChannel, CURLOPT_SSL_VERIFYHOST, 2);
     }
     // Callback to extract all the HTTP headers from the response...
     // In order to really correctly parse HTTP headers one would have to look at RFC 2616...
     curl_setopt($curlChannel, CURLOPT_HEADERFUNCTION, function ($curlChannel, $header) use($httpResponse) {
         // Ignore Status-Line (RFC 2616, section 6.1)
         if (0 === preg_match('|^HTTP/\\d+.\\d+ [1-5]\\d\\d|', $header)) {
             // Only deal with header lines that contain a colon
             if (strpos($header, ":") !== FALSE) {
                 // Only deal with header lines that contain a colon
                 list($key, $value) = explode(":", trim($header));
                 $httpResponse->setHeader(trim($key), trim($value));
             }
         }
         return strlen($header);
     });
     $output = curl_exec($curlChannel);
     if ($errorNumber = curl_errno($curlChannel)) {
         throw new OutgoingHttpRequestException(curl_error($curlChannel));
     }
     $httpResponse->setStatusCode(curl_getinfo($curlChannel, CURLINFO_HTTP_CODE));
     $httpResponse->setContent($output);
     curl_close($curlChannel);
     return $httpResponse;
 }
コード例 #2
0
ファイル: Router.php プロジェクト: hypejunction/hypegraph
 /**
  * Sends the response using the result
  * 
  * @param mixed $result Result
  * @return void
  */
 public function send($result = null)
 {
     if ($result instanceof HttpResponse) {
         $result->send();
         exit;
     }
     // Output the result
     if (!$result instanceof GenericResult) {
         $result = new SuccessResult($result);
     }
     $result = elgg_trigger_plugin_hook('result', 'graph', null, $result);
     $output = elgg_view('graph/output', array('result' => $result));
     if (elgg_get_viewtype() === 'default') {
         $layout = elgg_view_layout('one_column', array('content' => $output));
         $output = elgg_view_page('', $layout);
     }
     $this->response->setStatusCode($result->getStatusCode())->setContent($output)->prepare($this->request)->send();
     exit;
 }
コード例 #3
0
ファイル: ResponseTest.php プロジェクト: techdivision/http
 /**
  * Test's the status line getter with a non existing http status code
  */
 public function testGetResponseStatusLineWithNonExistingHttpStatusCode()
 {
     $this->response->setStatusCode(999);
     $this->assertSame("HTTP/1.1 999 Unassigned\r\n", $this->response->getStatusLine());
 }
コード例 #4
0
ファイル: HttpResponseTest.php プロジェクト: elgervb/php-http
 /**
  * @covers \http\HttpResponse::setStatusCode
  */
 public function testSetStatusCode()
 {
     $this->object->setStatusCode(301);
     $code = $this->object->getStatusCode();
     $this->assertEquals(301, $code, 'Status code should be 301');
 }