示例#1
0
 public function testClearHeaders()
 {
     $headers = array('User-Agent: My Agent', 'Cache-Control: no-cache');
     $this->request->setHeaders($headers);
     $this->assertEquals($headers, $this->request->getHeaders());
     $this->request->clearHeaders();
     $this->assertEquals(array(), $this->request->getHeaders());
 }
示例#2
0
 /**
  *
  * adapt Request to HttpRequest
  *
  * {@link http://us.php.net/manual/en/http.constants.php
  *  HTTP Predefined Constant}
  *
  * {@link http://us.php.net/manual/en/http.request.options.php
  *  HttpRequest options}
  *
  * @throws InvalidArgumentException
  * @param  Request                  $request
  * @param  Endpoint                 $endpoint
  * @param  HttpRequest
  * @return \HttpRequest
  */
 public function toHttpRequest($request, $endpoint)
 {
     $url = $endpoint->getBaseUri() . $request->getUri();
     $httpRequest = new \HttpRequest($url);
     $headers = array();
     foreach ($request->getHeaders() as $headerLine) {
         list($header, $value) = explode(':', $headerLine);
         if ($header = trim($header)) {
             $headers[$header] = trim($value);
         }
     }
     // Try endpoint authentication first, fallback to request for backwards compatibility
     $authData = $endpoint->getAuthentication();
     if (empty($authData['username'])) {
         $authData = $request->getAuthentication();
     }
     if (!empty($authData['username']) && !empty($authData['password'])) {
         $headers['Authorization'] = 'Basic ' . base64_encode($authData['username'] . ':' . $authData['password']);
     }
     switch ($request->getMethod()) {
         case Request::METHOD_GET:
             $method = HTTP_METH_GET;
             break;
         case Request::METHOD_POST:
             $method = HTTP_METH_POST;
             if ($request->getFileUpload()) {
                 $httpRequest->addPostFile('content', $request->getFileUpload(), 'application/octet-stream; charset=binary');
             } else {
                 $httpRequest->setBody($request->getRawData());
                 if (!isset($headers['Content-Type'])) {
                     $headers['Content-Type'] = 'text/xml; charset=utf-8';
                 }
             }
             break;
         case Request::METHOD_HEAD:
             $method = HTTP_METH_HEAD;
             break;
         default:
             throw new InvalidArgumentException('Unsupported method: ' . $request->getMethod());
     }
     $httpRequest->setMethod($method);
     $httpRequest->setOptions(array('timeout' => $endpoint->getTimeout(), 'connecttimeout' => $endpoint->getTimeout(), 'dns_cache_timeout' => $endpoint->getTimeout()));
     $httpRequest->setHeaders($headers);
     return $httpRequest;
 }
示例#3
0
文件: Http.php 项目: lhess/solarium
 /**
  * Create a stream context for a request
  *
  * @param  Request  $request
  * @param  Endpoint $endpoint
  * @return resource
  */
 public function createContext($request, $endpoint)
 {
     $method = $request->getMethod();
     $context = stream_context_create(array('http' => array('method' => $method, 'timeout' => $endpoint->getTimeout())));
     if ($method == Request::METHOD_POST) {
         if ($request->getFileUpload()) {
             stream_context_set_option($context, 'http', 'content', file_get_contents($request->getFileUpload()));
             $request->addHeader('Content-Type: multipart/form-data');
         } else {
             $data = $request->getRawData();
             if (null !== $data) {
                 stream_context_set_option($context, 'http', 'content', $data);
                 $request->addHeader('Content-Type: text/xml; charset=UTF-8');
             }
         }
     }
     // Try endpoint authentication first, fallback to request for backwards compatibility
     $authData = $endpoint->getAuthentication();
     if (empty($authData['username'])) {
         $authData = $request->getAuthentication();
     }
     if (!empty($authData['username']) && !empty($authData['password'])) {
         $request->addHeader('Authorization: Basic ' . base64_encode($authData['username'] . ':' . $authData['password']));
     }
     $headers = $request->getHeaders();
     if (count($headers) > 0) {
         stream_context_set_option($context, 'http', 'header', implode("\r\n", $headers));
     }
     return $context;
 }
示例#4
0
文件: Curl.php 项目: lhess/solarium
 /**
  * Create http request options from request.
  *
  * @param  Request  $request
  * @param  Endpoint $endpoint
  * @return array
  */
 protected function createOptions($request, $endpoint)
 {
     // @codeCoverageIgnoreStart
     $options = array('timeout' => $endpoint->getTimeout());
     foreach ($request->getHeaders() as $headerLine) {
         list($header, $value) = explode(':', $headerLine);
         if ($header = trim($header)) {
             $options['headers'][$header] = trim($value);
         }
     }
     return $options;
     // @codeCoverageIgnoreEnd
 }
 public function testPreExecuteRequestWithPersistentAndNonPersistentCustomizations()
 {
     $input = array('key' => 'xid', 'type' => 'param', 'name' => 'xid', 'value' => 123);
     $this->plugin->addCustomization($input);
     $input = array('key' => 'auth', 'type' => 'header', 'name' => 'X-my-auth', 'value' => 'mypassword', 'persistent' => true);
     $this->plugin->addCustomization($input);
     $request = new Request();
     $event = new PreExecuteRequestEvent($request, new Endpoint());
     $this->plugin->preExecuteRequest($event);
     $this->assertEquals(123, $request->getParam('xid'));
     $this->assertEquals(array('X-my-auth: mypassword'), $request->getHeaders());
     // second use, only the header should be persistent
     $request = new Request();
     $event = new PreExecuteRequestEvent($request, new Endpoint());
     $this->plugin->preExecuteRequest($event);
     $this->assertEquals(null, $request->getParam('xid'));
     $this->assertEquals(array('X-my-auth: mypassword'), $request->getHeaders());
 }