예제 #1
0
 /**
  * {@inheritdoc}
  */
 public function sendRequest(RequestInterface $request)
 {
     $request = $this->sanitizeRequest($request);
     $headers = new Headers();
     foreach ($request->getHeaders() as $key => $value) {
         $headers->addHeader(new GenericHeader($key, $request->getHeaderLine($key)));
     }
     $zendRequest = new Request();
     $zendRequest->setMethod($request->getMethod());
     $zendRequest->setUri((string) $request->getUri());
     $zendRequest->setHeaders($headers);
     $zendRequest->setContent($request->getBody()->getContents());
     $options = ['httpversion' => $request->getProtocolVersion()];
     if (extension_loaded('curl')) {
         $options['curloptions'] = [CURLOPT_HTTP_VERSION => $this->getProtocolVersion($request->getProtocolVersion())];
     }
     $this->client->setOptions($options);
     if ($this->client->getAdapter() instanceof ZendClient\Adapter\Curl && $request->getMethod()) {
         $request = $request->withHeader('Content-Length', '0');
     }
     try {
         $zendResponse = $this->client->send($zendRequest);
     } catch (RuntimeException $exception) {
         throw new NetworkException($exception->getMessage(), $request, $exception);
     }
     return $this->responseFactory->createResponse($zendResponse->getStatusCode(), $zendResponse->getReasonPhrase(), $zendResponse->getHeaders()->toArray(), $zendResponse->getContent(), $zendResponse->getVersion());
 }
예제 #2
0
 /**
  *
  * @param MvcEvent $event            
  * @return bool
  */
 public function isGranted(MvcEvent $event)
 {
     $request = $event->getRequest();
     if (!$request instanceof HttpRequest) {
         return true;
     }
     if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
         $clientIp = $_SERVER['HTTP_X_FORWARDED_FOR'];
     } else {
         $clientIp = $_SERVER['REMOTE_ADDR'];
     }
     if (array_key_exists($clientIp, $this->users)) {
         $user = $this->users[$clientIp];
         if ($this->auth->hasIdentity()) {
             // do nothing
         } else {
             $adapter = $this->auth->getAdapter();
             $request = new HttpRequest();
             $request->setMethod(HttpRequest::METHOD_POST);
             $request->getPost()->identity = $user['user'];
             $request->getPost()->credential = $user['password'];
             $request->setContent($request->getPost()->toString());
             $result = $adapter->prepareForAuthentication($request);
             $authenticate = $this->auth->authenticate($adapter);
             if (!$authenticate->isValid()) {
                 error_log('FAIL');
             }
         }
     }
     return true;
 }
 /**
  * @param  Request  $request
  * @return Response
  */
 public function request(Request $request)
 {
     $headers = new Headers();
     $headers->addHeaders($request->getHeaders());
     $zendRequest = new ZendRequest();
     $zendRequest->setVersion($request->getProtocolVersion());
     $zendRequest->setMethod($request->getMethod());
     $zendRequest->setUri((string) $request->getUrl());
     $zendRequest->setHeaders($headers);
     $zendRequest->setContent($request->getContent());
     /** @var ZendResponse $zendResponse */
     $zendResponse = $this->client->send($zendRequest);
     return new Response((string) $zendResponse->getVersion(), $zendResponse->getStatusCode(), $zendResponse->getReasonPhrase(), $zendResponse->getHeaders()->toArray(), $zendResponse->getContent());
 }
예제 #4
0
 /**
  * @param string $collectionPath
  * @param \SimpleXMLElement $element
  * @return \SimpleXMLElement | null
  */
 public function save($collectionPath, \SimpleXMLElement $element)
 {
     $uri = new Http($collectionPath);
     $request = new Request();
     $request->setMethod('PUT');
     $headers = new Headers();
     $headers->addHeader(new GenericHeader('Content-Type', 'application/xml'));
     $request->setHeaders($headers);
     $request->setContent($element->asXML());
     $response = $this->transport->put($uri, $request);
     $body = $response->getBody();
     if ($response->isClientError() || empty($body)) {
         return null;
     }
     return new \SimpleXMLElement($body);
 }
예제 #5
0
파일: Gist.php 프로젝트: ocramius/ocramius
 public function persist(HelpReport $report)
 {
     $data = ['description' => 'Report generated via Ocramius CLI', 'files' => ['report.json' => ['content' => json_encode($report)]], 'public' => false];
     $request = new Request();
     $request->setUri('https://api.github.com/gists');
     $request->setContent(json_encode($data));
     $request->setMethod(Request::METHOD_POST);
     $request->getHeaders()->addHeader(ContentType::fromString('Content-Type: application/json'));
     $request->getHeaders()->addHeaderLine('X-Requested-With: Ocramius CLI');
     $response = $this->client->send($request);
     if (!$response->isSuccess()) {
         throw new \UnexpectedValueException('Could not obtain a valid GIST from the github API');
     }
     $response = json_decode($response->getBody(), true);
     return $response['html_url'];
 }
예제 #6
0
 /**
  * Creates and configures a HTTP request based on the provided base URL and the Perun request object.
  * 
  * @param string $baseUrl
  * @param PerunRequest $perunRequest
  * @param HttpRequest $httpRequest
  * @return \Zend\Http\Request
  */
 public function createRequest($baseUrl, PerunRequest $perunRequest)
 {
     /* @var $httpRequest \Zend\Http\Request */
     $httpRequest = new HttpRequest();
     $httpRequest->setUri($this->constructUrl($baseUrl, $perunRequest));
     if ($perunRequest->isChangeState()) {
         $serializedParams = $this->serializer->serialize($perunRequest->getPayload());
         $httpRequest->setMethod(HttpRequest::METHOD_POST);
         $httpRequest->setContent($serializedParams);
         $httpRequest->getHeaders()->addHeaders(array('Content-Type' => $this->serializer->getMimeType()));
     } else {
         $params = $perunRequest->getPayload()->getParams();
         $httpRequest->setMethod(HttpRequest::METHOD_GET);
         $httpRequest->getQuery()->fromArray($params);
     }
     return $httpRequest;
 }
예제 #7
0
 public function testToken($token)
 {
     $request = new Request();
     //ajoute des headers et modifie la requête
     $request->getHeaders()->addHeaders(array('Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'));
     $request->setUri('http://localhost/rest/web/index.php/admin/publications/asc');
     //URL du webservice en dehors du projet
     $request->setMethod('GET');
     $request->setContent(json_encode(array('a' => $token)));
     $client = new Client();
     $response = $client->send($request);
     //envoie la requête au service REST
     $data = $response->getBody();
     //récupération du token
     var_dump($response);
     //return $data;
 }
예제 #8
0
 public function testValidateIncomingData()
 {
     $inputFilter = new SimpleInputFilter();
     $inputFilterPluginManager = $this->getMock(InputFilterPluginManager::class);
     $inputFilterPluginManager->expects($this->any())->method('get')->with(SimpleInputFilter::class)->willReturn($inputFilter);
     $request = new HttpRequest();
     $request->setPost(new Parameters(['fields1' => 'value1', 'fields2' => 'value2']));
     $request->setContent(json_encode(['fields3' => 'value3']));
     $controller = $this->getMock(AbstractRestfulController::class);
     $controller->expects($this->at(0))->method('getRequest')->willReturn($request);
     $controller->expects($this->at(1))->method('getRequest')->willReturn($request);
     $plugin = new ValidateIncomingData($inputFilterPluginManager);
     $plugin->setController($controller);
     $expected = ['fields1' => 'value1', 'fields2' => 'value2', 'fields3' => 'value3'];
     $result = $plugin(SimpleInputFilter::class);
     $this->assertEquals($expected, $result);
 }
 public function testUpdate()
 {
     $userArray = array('location' => 'there', 'groups' => array(array('name' => 'groupB')), 'profile' => array('firstname' => 'Toby'));
     $request = new Request();
     $request->setMethod(Request::METHOD_PUT);
     $request->setQuery(new Parameters(array('id' => 'superdweebie')));
     $request->setContent($userArray);
     $event = new MvcEvent();
     $event->setRouteMatch(new RouteMatch(array()));
     $event->setApplication($this->serviceManager->get('application'));
     $response = null;
     $this->controller->setEvent($event);
     $consoleModel = $this->controller->dispatch($request, $response);
     $repository = $this->documentManager->getRepository('Sds\\DoctrineExtensionsModule\\Test\\TestAsset\\Document\\User');
     $this->documentManager->clear();
     $user = $repository->find($this->id);
     $this->assertEquals('superdweebie', $user->getId());
     $this->assertEquals('there', $user->location());
     $this->assertEquals('groupB', $user->getGroups()[0]);
     $this->assertEquals('Toby', $user->getProfile()->getFirstName());
 }
예제 #10
0
 public function findOne($token, $idPublication)
 {
     $request = new Request();
     //ajoute des headers et modifie la requête
     $request->getHeaders()->addHeaders(array('Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'));
     $request->setUri('http://localhost/rest/web/index.php/admin/publications/' . $idPublication);
     //URL du webservice en dehors du projet
     $request->setMethod('GET');
     $request->setContent(json_encode(array('a' => $token)));
     $client = new Client();
     $response = $client->send($request);
     //envoie la requête au service REST
     $statut = $response->getStatusCode();
     //Traitement selon statut
     if ($statut >= 200 && $statut <= 299) {
         return json_decode($response->getBody(), true);
     } else {
         if ($statut >= 300) {
             throw new \Exception();
         }
     }
 }
예제 #11
0
 public function testUnknownEventFormat()
 {
     $services = $this->getApplicationServiceLocator();
     $emitter = $services->get('NetglueSendgrid\\Service\\EventEmitter');
     $request = new HttpRequest();
     $request->setContent('[{
         "email": "*****@*****.**",
         "timestamp": 1464173660,
         "smtp-id": "<14c5d75ce93.dfd.64b469@ismtpd-555>",
         "event": "whatever!",
         "category": "Foo",
         "sg_event_id": "lHhVQCyr17K4lAA6Xdefyg==",
         "sg_message_id": "14c5d75ce93.dfd.64b469.filter0001.16648.5515E0B88.0",
         "reason": "500 unknown recipient",
         "status": "5.0.0"
     }]');
     $em = $emitter->getEventManager();
     $sm = $em->getSharedManager();
     $sm->attach('NetglueSendgrid\\Service\\EventEmitter', '*', [$this, 'checkInvalidEvent']);
     $this->eventsFired = 0;
     $emitter->receiveRequest($request);
     $this->assertSame(1, $this->eventsFired);
 }
예제 #12
0
 private function send(Checkout $checkout)
 {
     $request = new Request();
     $request->getHeaders()->addHeaders(array('Content-Type: application/xml; charset=ISO-8859-1'));
     $request->setUri($this->options->getWsUrl());
     $request->setMethod(Request::METHOD_POST);
     $request->setContent($checkout->parseXML());
     $client = new Client();
     $response = $client->dispatch($request);
     if ($response->getBody() == 'Unauthorized') {
         throw new \Exception('Unauthorized access to PagSeguro');
     }
     $xml = '';
     try {
         $xml = simplexml_load_string($response->getBody());
     } catch (\Exception $e) {
         throw new \Exception('Error on parse reponse xml. ' . $response->getBody(), 500, $e);
     }
     if ($xml->code) {
         return $xml->code;
     }
     throw new \Exception('An error has occurred: ' . $response->getBody());
 }
 public function testPostWithJsonContent()
 {
     $request = new Request();
     $request->setMethod(Request::METHOD_POST);
     $request->setContent('{"data":["someValue", "anotherValue"]}');
     $request->getHeaders()->addHeader(new ContentType('application/json'));
     $result = $this->controller->dispatch($request);
     $expected = ['ApplicationFeatureApiTest\\Fixture\\CreateController', ['action' => 'index']];
     $this->assertSame($expected, $result);
     $expectedPost = ['data' => ['someValue', 'anotherValue']];
     /** @var \Zend\Http\PhpEnvironment\Request $request */
     $request = $this->controller->getRequest();
     $this->assertSame($expectedPost, $request->getPost()->toArray());
 }
 public function testProcessPatchRequestWithZfCampusMediaTypeReturnsUpdatedConfigurationKeys()
 {
     $config = ['foo' => 'FOO', 'bar' => ['baz' => 'bat'], 'baz' => 'BAZ'];
     $configResource = new ConfigResource($config, $this->file, $this->writer);
     $controller = new ConfigController($configResource);
     $controller->setPluginManager($this->plugins);
     $request = new Request();
     $request->setMethod('patch');
     $request->setContent(json_encode(['bar' => ['baz' => 'UPDATED'], 'baz' => 'UPDATED']));
     $request->getHeaders()->addHeaderLine('Content-Type', 'application/vnd.zfcampus.v1.config+json');
     $request->getHeaders()->addHeaderLine('Accept', 'application/vnd.zfcampus.v1.config+json');
     $controller->setRequest($request);
     $result = $controller->processAction();
     $this->assertInternalType('array', $result);
     $expected = ['bar' => ['baz' => 'UPDATED'], 'baz' => 'UPDATED'];
     $this->assertEquals($expected, $result);
 }
 /**
  * Return an access code from an OAuth2 request callback
  */
 public function validate($profile, $query)
 {
     $config = $this->getConfig();
     // Validate the application state
     $container = new Container("OAuth2_Client_{$profile}");
     if ($container->state !== $query['state']) {
         // @codeCoverageIgnoreStart
         throw new ValidateException("Application state changed during OAuth2 authorization");
     } else {
         // @codeCoverageIgnoreEnd
         $container->state = null;
     }
     // Build redirect uri
     $urlPlugin = $this->getPluginManager()->get('url');
     $redirectUri = $urlPlugin->fromRoute('zf-oauth2-client', array('profile' => $profile), array('force_canonical' => true));
     // Exchange the authorization code for an access token
     $request = new Request();
     $request->setUri($config['profiles'][$profile]['endpoint']);
     $request->setMethod(Request::METHOD_POST);
     $request->getHeaders()->addHeaders(array('Accept' => 'application/json', 'Content-Type' => 'application/json'));
     $request->setContent(Json::encode(array('grant_type' => 'authorization_code', 'client_id' => $config['profiles'][$profile]['client_id'], 'client_secret' => $config['profiles'][$profile]['secret'], 'redirect_uri' => $redirectUri, 'code' => $query['code'])));
     $response = $this->getHttpClient()->send($request);
     $body = Json::decode($response->getBody(), true);
     if ($response->getStatusCode() !== 200) {
         // @codeCoverageIgnoreStart
         throw new ValidateException($body['detail'], $body['status']);
     }
     // @codeCoverageIgnoreEnd
     // Save the access token to the session
     $container->access_token = $body['access_token'];
     $container->expires_in = $body['expires_in'];
     $container->token_type = $body['token_type'];
     $container->scope = $body['scope'];
     $container->refresh_token = $body['refresh_token'];
     $expires = new Datetime();
     $expires = $expires->add(new DateInterval('PT' . $container->expires_in . 'S'));
     $container->expires = $expires;
     return $body;
 }
 /**
  * @group 42
  */
 public function testReturns400ResponseWhenBodyPartIsMissingName()
 {
     $request = new Request();
     $request->setMethod('PUT');
     $request->getHeaders()->addHeaderLine('Content-Type', 'multipart/form-data; boundary=6603ddd555b044dc9a022f3ad9281c20');
     $request->setContent(file_get_contents(__DIR__ . '/TestAsset/multipart-form-data-missing-name.txt'));
     $event = new MvcEvent();
     $event->setRequest($request);
     $event->setRouteMatch(new RouteMatch([]));
     $listener = $this->listener;
     $result = $listener($event);
     $this->assertInstanceOf('ZF\\ApiProblem\\ApiProblemResponse', $result);
     $this->assertEquals(400, $result->getStatusCode());
     $details = $result->getApiProblem()->toArray();
     $this->assertContains('does not contain a "name" field', $details['detail']);
 }
예제 #17
0
 /**
  * @group 50
  * @dataProvider methodsWithBodies
  */
 public function testMergesHalEmbeddedPropertiesIntoTopLevelObjectWhenDecodingHalJson($method)
 {
     $data = ['foo' => 'bar', '_embedded' => ['bar' => ['baz' => 'bat']]];
     $json = json_encode($data);
     $listener = $this->listener;
     $request = new Request();
     $request->setMethod($method);
     $request->getHeaders()->addHeaderLine('Content-Type', 'application/hal+json');
     $request->setContent($json);
     $event = new MvcEvent();
     $event->setRequest($request);
     $event->setRouteMatch(new RouteMatch([]));
     $result = $listener($event);
     $this->assertNull($result);
     $params = $event->getParam('ZFContentNegotiationParameterData');
     $expected = ['foo' => 'bar', 'bar' => ['baz' => 'bat']];
     $this->assertEquals($expected, $params->getBodyParams());
 }
예제 #18
0
 public function testRequestCanBeCastToAString()
 {
     $request = new Request();
     $request->setMethod(Request::METHOD_GET);
     $request->setUri('/');
     $request->setContent('foo=bar&bar=baz');
     $this->assertEquals("GET / HTTP/1.1\r\n\r\nfoo=bar&bar=baz", $request->toString());
 }
 public function testDecodingMultipartFormDataWithFileRegistersFileCleanupEventListener()
 {
     $request = new Request();
     $request->setMethod('PATCH');
     $request->getHeaders()->addHeaderLine('Content-Type', 'multipart/form-data; boundary=6603ddd555b044dc9a022f3ad9281c20');
     $request->setContent(file_get_contents(__DIR__ . '/TestAsset/multipart-form-data.txt'));
     $target = new TestAsset\EventTarget();
     $events = $this->getMock('Zend\\EventManager\\EventManagerInterface');
     $events->expects($this->once())->method('attach')->with($this->equalTo('finish'), $this->equalTo(array($this->listener, 'onFinish')), $this->equalTo(1000));
     $target->events = $events;
     $event = new MvcEvent();
     $event->setTarget($target);
     $event->setRequest($request);
     $event->setRouteMatch(new RouteMatch(array()));
     $listener = $this->listener;
     $result = $listener($event);
 }
 public function testAddInputFilter()
 {
     $inputFilter = [['name' => 'bar', 'validators' => [['name' => 'NotEmpty', 'options' => ['type' => 127]], ['name' => 'Digits']]]];
     $request = new Request();
     $request->setMethod('put');
     $request->setContent(json_encode($inputFilter));
     $request->getHeaders()->addHeaderLine('Accept', 'application/json');
     $request->getHeaders()->addHeaderLine('Content-Type', 'application/json');
     $module = 'InputFilter';
     $controller = 'InputFilter\\V1\\Rest\\Foo\\Controller';
     $params = ['name' => $module, 'controller_service_name' => $controller];
     $routeMatch = new RouteMatch($params);
     $routeMatch->setMatchedRouteName('zf-apigility-admin/api/module/rest-service/rest_input_filter');
     $event = new MvcEvent();
     $event->setRouteMatch($routeMatch);
     $parameters = new ParameterDataContainer();
     $parameters->setBodyParams($inputFilter);
     $event->setParam('ZFContentNegotiationParameterData', $parameters);
     $plugins = new PluginManager();
     $plugins->setInvokableClass('bodyParams', 'ZF\\ContentNegotiation\\ControllerPlugin\\BodyParams');
     $this->controller->setRequest($request);
     $this->controller->setEvent($event);
     $this->controller->setPluginManager($plugins);
     $result = $this->controller->indexAction();
     $this->assertInstanceOf('ZF\\ContentNegotiation\\ViewModel', $result);
     $payload = $result->payload;
     $this->assertInstanceOf('ZF\\Hal\\Entity', $payload);
     $entity = $payload->entity;
     $this->assertInstanceOf('ZF\\Apigility\\Admin\\Model\\InputFilterEntity', $entity);
     $config = (include $this->basePath . '/module.config.php');
     $validator = $config['zf-content-validation'][$controller]['input_filter'];
     $expected = $config['input_filter_specs'][$validator];
     $expected['input_filter_name'] = $validator;
     $this->assertEquals($expected, $entity->getArrayCopy());
 }
 /**
  * @param array $data
  *
  * @return string
  * @throws Exception\RuntimeException
  */
 private function getFile(array $data)
 {
     $data = array_merge(array('api_token' => $this->options->getApiToken(), 'id' => $this->options->getProjectId(), 'action' => 'export'), $data);
     $fileKey = md5(json_encode($data));
     if (isset($this->files[$fileKey])) {
         return $this->files[$fileKey];
     }
     $client = new Http\Client(null, $this->options->getClient());
     $request = new Http\Request();
     $request->setUri($this->options->getUrl());
     $request->setMethod(Http\Request::METHOD_POST);
     $request->setContent(http_build_query($data));
     usleep($this->options->getRequestDelay());
     /** @var \Zend\Http\Response $response */
     $response = $client->dispatch($request);
     if (!$response->isSuccess()) {
         throw new Exception\RuntimeException('Request was not successful');
     }
     /** @var \stdClass $content */
     $content = json_decode($response->getContent());
     if ($content->response->code != 200) {
         throw new Exception\RuntimeException($content->response->message);
     }
     $this->files[$fileKey] = $content->item;
     return $this->files[$fileKey];
 }
예제 #22
0
 public function ImportXML($id, $xml_data)
 {
     $zend_response = null;
     $xml_response = null;
     $post_data = array('xml' => $xml_data);
     $post_content = http_build_query($post_data);
     try {
         $client = $this->getClient();
         $request = new Request();
         $url = $this->getEndPoint();
         $request->setUri($url);
         $request->setMethod(Request::METHOD_POST);
         $request->setContent($post_content);
         /* @var $zend_response \Zend\Http\Response */
         $zend_response = $client->dispatch($request);
         if ($zend_response) {
             $xml_response = $zend_response->getContent();
         }
     } catch (\Exception $e) {
         return $this->respondError($e);
     }
     try {
         $response = $this->xml2array($xml_response);
     } catch (\Exception $e) {
         $response = $xml_response;
     }
     $this->getServiceEvent()->setResult($response);
     return $response;
 }
예제 #23
0
 protected function getSubRequest($batchRequest, array $requestData)
 {
     $request = new Request();
     $request->setMethod($requestData['method']);
     $request->setUri($requestData['uri']);
     $queryString = $request->getUri()->getQuery();
     if ($queryString) {
         $query = [];
         parse_str($queryString, $query);
         $request->setQuery(new Parameters($query));
     }
     $requestHeaders = [$batchRequest->getHeaders()->get('Accept'), $batchRequest->getHeaders()->get('Content-Type')];
     if (isset($requestData['headers'])) {
         foreach ($requestData['headers'] as $name => $value) {
             $requestHeaders[] = GenericHeader::fromString($name . ': ' . $value);
         }
     }
     $request->getHeaders()->addHeaders($requestHeaders);
     if (isset($requestData['content'])) {
         $request->setContent(json_encode($requestData['content']));
     }
     return $request;
 }
예제 #24
0
    /**
     * @dataProvider methodsWithWhitespaceInsideBody
     */
    public function testWillNotRemoveWhitespaceInsideBody($method, $content)
    {
        $listener = $this->listener;

        $request = new Request();
        $request->setMethod($method);
        $request->getHeaders()->addHeaderLine('Content-Type', 'application/json');
        $request->setContent($content);

        $event = new MvcEvent();
        $event->setRequest($request);
        $event->setRouteMatch(new RouteMatch(array()));

        $result = $listener($event);
        $this->assertNull($result);
        $params = $event->getParam('ZFContentNegotiationParameterData');
        $this->assertEquals(array('foo' => 'bar foo'), $params->getBodyParams());
    }
 public function create($data)
 {
     $router = $this->serviceLocator->get('router');
     $controllerLoader = $this->serviceLocator->get('controllerLoader');
     foreach ($data as $key => $requestData) {
         $request = new Request();
         $request->setMethod($requestData['method']);
         $request->setUri($requestData['uri']);
         $queryString = $request->getUri()->getQuery();
         if ($queryString) {
             $query = [];
             parse_str($queryString, $query);
             $request->setQuery(new Parameters($query));
         }
         if (isset($requestData['headers'])) {
             foreach ($requestData['headers'] as $name => $value) {
                 $request->getHeaders()->addHeaderLine($name, $value);
             }
         }
         $request->getHeaders()->addHeaders([$this->request->getHeaders()->get('Accept'), $this->request->getHeaders()->get('Content-Type')]);
         if (isset($requestData['content'])) {
             $request->setContent(json_encode($requestData['content']));
         }
         $response = new Response();
         $event = new MvcEvent();
         $event->setRequest($request);
         $event->setResponse($response);
         $match = $router->match($request);
         RouteListener::resolveController($match);
         $contentModel = null;
         if (!isset($match) || $match->getMatchedRouteName() != 'rest.' . $this->options->getManifestName()) {
             $contentModel = $this->createExceptionContentModel(new Exception\RuntimeException(sprintf('%s uri is not a rest route, so is not supported by batch controller.', $requestData['uri'])), $event);
         } else {
             try {
                 $controller = $controllerLoader->get($match->getParam('controller'));
             } catch (\Zend\ServiceManager\Exception\ServiceNotFoundException $exception) {
                 $contentModel = $this->createExceptionContentModel($exception, $event);
                 $response->setStatusCode(404);
             }
             $event->setRouteMatch($match);
             $controller->setEvent($event);
             if (!isset($contentModel)) {
                 try {
                     $contentModel = $controller->dispatch($request, $response);
                 } catch (\Exception $exception) {
                     $contentModel = $this->createExceptionContentModel($exception, $event);
                 }
             }
         }
         $headers = [];
         foreach ($response->getHeaders() as $header) {
             $headers[$header->getFieldName()] = $header->getFieldValue();
         }
         $responseModel = new JsonModel(['status' => $response->getStatusCode(), 'headers' => $headers]);
         if ($contentModel instanceof ModelInterface) {
             $responseModel->addChild($contentModel, 'content');
         }
         $this->model->addChild($responseModel, $key);
     }
     return $this->model;
 }
예제 #26
0
 /**
  * Executes a request to a given URL using injected Data Provider
  *
  * @param  string|\Zend\Uri\HttpUri $url endpoint destination URL
  * @param  array|null $params request params values
  * @param  int $responseFormat Format of the response - needed to execute a proper parser
  * @param  string|null $auth Auth data login:password
  * @param  array|null $postData POST data
  * @return mixed
  * @throws \Zend\Http\Client\Exception\RuntimeException
  */
 public function request($url, $params = [], $responseFormat = self::RESPONSE_IN_JSON, $auth = null, $postData = null)
 {
     $request = new Request();
     $request->setUri($this->assembleUrl($url, $params));
     // Auth data
     if ($auth && !$this->getDataProvider()->getAdapter() instanceof \Zend\Http\Client\Adapter\Test) {
         $this->setDataProvider($this->setDefaultDataProvider());
     }
     // Use POST method
     if ($postData) {
         $request->setMethod('POST');
         $request->setContent(http_build_query($postData));
     }
     $client = $this->getDataProvider();
     if (!is_null($this->getDaoAuth())) {
         $client->setAuth($this->getDaoAuth()['username'], $this->getDaoAuth()['password'], Client::AUTH_BASIC);
     }
     $headers = $request->getHeaders();
     $headers->addHeaders($this->getDaoHeaders());
     /**
      * @var \Zend\Http\Response
      */
     $response = $client->dispatch($request);
     if ($response->isSuccess()) {
         switch ($responseFormat) {
             case self::RESPONSE_IN_JSON:
                 $responseParsed = Json::decode($response->getBody(), Json::TYPE_ARRAY);
                 break;
             case self::RESPONSE_IN_XML:
                 try {
                     $responseParsed = simplexml_load_string($response->getBody());
                 } catch (Exception $e) {
                     throw new Client\Exception\RuntimeException('Parsing XML from request response failed');
                 }
                 break;
             case self::RESPONSE_IN_HTML:
                 try {
                     // load as HTML, supress any error and pass it to XML parser
                     $doc = new \DOMDocument();
                     $doc->recover = true;
                     $doc->strictErrorChecking = false;
                     @$doc->loadHTML($response->getBody());
                     $responseParsed = simplexml_load_string($doc->saveXML());
                 } catch (Exception $e) {
                     throw new Client\Exception\RuntimeException('Parsing XML from request response failed');
                 }
                 break;
             case self::RESPONSE_AS_IS:
                 $responseParsed = $response;
                 break;
             default:
                 throw new Client\Exception\RuntimeException('Parser for request response not found.');
                 break;
         }
         return $responseParsed;
     } else {
         throw new Client\Exception\RuntimeException('Request failed with status: ' . $response->renderStatusLine() . ' ' . $response->getBody(), $response->getStatusCode());
     }
 }
예제 #27
0
$loader->register();
/*
GET URI 1.1
HEADERS Content-Type: text/html
BODY -> Conteudo
*/
use Zend\Http\Request;
// Request GET
//$request = new Request();
//$request->setMethod(Request::METHOD_GET);
//$request->setUri("http://google.com");
//$request->setContent("Conteúdo da nossa request");
//
//echo $request->toString();
// POST
//$request = new Request();
//$request->setMethod(Request::METHOD_POST);
//$request->getPost()->set('nome','Wesley');
//$request->getPost()->set('x','10');
//$request->setUri("http://google.com");
//$request->setContent($request->getPost()->toString());
//
//echo $request->toString();
$request = new Request();
$request->setMethod(Request::METHOD_POST);
$request->getPost()->set('nome', 'Wesley');
$request->getHeaders()->addHeaders(array('headerX' => 10, 'headerY' => 20));
$request->getHeaders()->addHeaderLine('Content-Type: text/html');
$request->setUri("http://google.com");
$request->setContent($request->getPost()->toString());
echo $request->toString();
예제 #28
0
파일: Api.php 프로젝트: carnage/mailchimp
 /**
  * Call an api method
  *
  * @param $method
  * @param $params
  * @return mixed
  * @throws \Exception
  */
 public function call($method, $params)
 {
     $params['apikey'] = $this->getApiKey();
     $params = json_encode($params);
     $client = $this->getClient();
     $uri = $this->getBaseUri() . $method . '.json';
     $headers = new Headers();
     $headers->addHeaderLine('Accept-Encoding', 'identity');
     $headers->addHeaderLine('Content-Type', 'application/json');
     $headers->addHeaderLine('Accept', '*/*');
     $request = new Request();
     $request->setHeaders($headers);
     $request->setUri($uri);
     $request->setMethod('POST');
     $request->setContent($params);
     $response = $client->dispatch($request);
     if ($response->isSuccess()) {
         return json_decode($response->getContent(), true);
     } else {
         /*@TODO throw a more useful exception*/
         throw new \Exception('Request Failed');
     }
 }
예제 #29
0
 /**
  * HTTP POST METHOD (static)
  *
  * @param  string $url
  * @param  array $params
  * @param  array $headers
  * @param  mixed $body
  * @throws Exception\InvalidArgumentException
  * @return Response|bool
  */
 public static function post($url, $params, $headers = array(), $body = null)
 {
     if (empty($url)) {
         return false;
     }
     $request = new Request();
     $request->setUri($url);
     $request->setMethod(Request::METHOD_POST);
     if (!empty($params) && is_array($params)) {
         $request->getPost()->fromArray($params);
     } else {
         throw new Exception\InvalidArgumentException('The array of post parameters is empty');
     }
     if (!isset($headers['Content-Type'])) {
         $headers['Content-Type'] = Client::ENC_URLENCODED;
     }
     if (!empty($headers) && is_array($headers)) {
         $request->getHeaders()->addHeaders($headers);
     }
     if (!empty($body)) {
         $request->setContent($body);
     }
     return static::getStaticClient()->send($request);
 }
 /**
  * @dataProvider methodsWithStringContent
  *
  * @param string $method
  * @param string $data
  * @param string $key
  */
 public function testStringContentIsParsedCorrectlyToAnArray($method, $data, $key)
 {
     $listener = $this->listener;
     $request = new Request();
     $request->setMethod($method);
     $request->setContent($data);
     $event = new MvcEvent();
     $event->setRequest($request);
     $event->setRouteMatch($this->createRouteMatch([]));
     $result = $listener($event);
     $this->assertNull($result);
     /** @var \ZF\ContentNegotiation\ParameterDataContainer $params */
     $params = $event->getParam('ZFContentNegotiationParameterData');
     $array = $params->getBodyParams();
     $this->assertArrayHasKey($key, $array);
     $this->assertSame('', $array[$key]);
 }