예제 #1
0
 /**
  * Create a request string (header and body)
  *
  * @param ConnectionOptions $options - connection options
  * @param string            $method  - HTTP method
  * @param string            $url     - HTTP URL
  * @param string            $body    - optional body to post
  * @param array             $customHeader - any arry containing header elements
  *
  * @return string - assembled HTTP request string
  */
 public static function buildRequest(ConnectionOptions $options, $method, $url, $body, $customHeader = array())
 {
     $host = $contentType = $authorization = $connection = '';
     $length = strlen($body);
     $endpoint = $options[ConnectionOptions::OPTION_ENDPOINT];
     if (Endpoint::getType($endpoint) !== Endpoint::TYPE_UNIX) {
         $host = sprintf('Host: %s%s', Endpoint::getHost($endpoint), self::EOL);
     }
     if ($options[ConnectionOptions::OPTION_BATCH] === true) {
         $contentType = 'Content-Type: multipart/form-data; boundary=' . self::MIME_BOUNDARY . self::EOL;
     } else {
         if ($length > 0 && $options[ConnectionOptions::OPTION_BATCHPART] === false) {
             // if body is set, we should set a content-type header
             $contentType = 'Content-Type: application/json' . self::EOL;
         }
     }
     if (isset($options[ConnectionOptions::OPTION_AUTH_TYPE]) && isset($options[ConnectionOptions::OPTION_AUTH_USER])) {
         // add authorization header
         $authorizationValue = base64_encode($options[ConnectionOptions::OPTION_AUTH_USER] . ':' . $options[ConnectionOptions::OPTION_AUTH_PASSWD]);
         $authorization = sprintf('Authorization: %s %s%s', $options[ConnectionOptions::OPTION_AUTH_TYPE], $authorizationValue, self::EOL);
     }
     if (isset($options[ConnectionOptions::OPTION_CONNECTION])) {
         // add connection header
         $connection = sprintf("Connection: %s%s", $options[ConnectionOptions::OPTION_CONNECTION], self::EOL);
     }
     $apiVersion = 'X-Arango-Version: ' . Connection::$_apiVersion . self::EOL;
     $customHeaders = "";
     foreach ($customHeader as $headerKey => $headerValue) {
         $customHeaders .= $headerKey . ": " . $headerValue . self::EOL;
     }
     // finally assemble the request
     $request = sprintf('%s %s %s%s', $method, $url, self::PROTOCOL, self::EOL) . $host . $apiVersion . $customHeaders . $contentType . $authorization . $connection . sprintf('Content-Length: %s%s%s', $length, self::EOL, self::EOL) . $body;
     return $request;
 }