2015-11-27 12 views
8

Sto usando un'app Symfony2 su heroku e non riesco a connettermi alla mia API.timeout di cURL su heroku

ti ho spiegare lo scenario:

  1. mi collegare nella mia app attraverso un modulo
  2. Quando sto correttamente il login mia app, un listener di evento viene attivato
  3. accedo l'URL che mi fornisce il token API li risparmio tali credenziali nella sessione utente
  4. ho reindirizzare il collegato (per l'applicazione e per l'API) utente alla home page dell'app

Quindi il mio problema è al punto 3. Ho provato con cURL e un file_get_contents per accedere all'URL ed entrambi non funzionano.

Quando provo ad accedere all'URL che mi fornisce il token OAuth necessario per accedere alla mia API, fallisce. Ho provato ad accedere manualmente a questo URL nel browser (o Postman) e restituisce bene il token OAuth.

Il listener di eventi:

 // Call of the url to deliver the token 
     $clientAPI = $this->em->getRepository('BgAPIBundle:Client')->findOneBy(array('providerAccess' => 'pcv')); 
     $curl = curl_init(); 
     curl_setopt($curl, CURLOPT_URL, urldecode($this->router->generate('fos_oauth_server_token', array('grant_type' => 'http://www.myapp/api/grants/api_key', 'client_id' => $clientAPI->getId() . '_' . $clientAPI->getRandomId(), 'client_secret' => $clientAPI->getSecret(), 'api_key' => $event->getAuthenticationToken()->getUser()->getApiKey()), true))); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curl, CURLOPT_COOKIESESSION, true); 
     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
     $response = curl_exec($curl); 
     $this->error = $response; // Only if there is problem 
     curl_close($curl); 

     // Write in logs 
     $date = new \DateTime('now'); 
     if (preg_match('#error#', $this->error)) { 
      $this->logger->error('Error on authentication success to deliver the OAuth token for ' . $event->getAuthenticationToken()->getUser() . ' the ' . $date->format('j/m/Y - H:i:s') . ' with message : ' . $this->error); 
     } 

L'errore da Heroku e miei log:

heroku/router: at=error code=H12 desc="Request timeout" method=GET path="/app_dev.php/oauth/v2/token?grant_type=http://www.app/api/grants/api_key&client_id=261_1ws6mvgmbeisgcsw4wokwk8k400og88gs0csssg0gk0884080s&client_secret=1ghmf01c1a4kc448ssgwg8sw04840c4ww8k00gg4o0k8w04g4&api_key=7f5284ac5ec8b35527d3c16dafa52a89" host=app-max.herokuapp.com request_id=dc8960fd-d154-4e5d-bc2f-34d4f25b8070 fwd="46.51.146.244" dyno=web.1 connect=0ms service=30006ms status=503 bytes=0 
app.ERROR: Une erreur est survenue lors de l'attribution du token OAuth de [email protected] le 25/11/2015 - 16:12:40 avec le message : <!DOCTYPE html>  <html>  <head>  <meta name="viewport" content="width=device-width, initial-scale=1">  <style type="text/css">   html, body, iframe { margin: 0; padding: 0; height: 100%; }   iframe { display: block; width: 100%; border: none; }  </style>  <title>Application Error</title>  </head>  <body>  <iframe src="//s3.amazonaws.com/heroku_pages/error.html">   <p>Application Error</p>  </iframe>  </body>  </html> [] [] 

Grazie per il vostro aiuto!

+1

Hai provato a impostare 'CURLOPT_TIMEOUT'? E.g: 'curl_setopt ($ curl, CURLOPT_TIMEOUT, 60);' – scoolnico

+0

Grazie per la risposta, ma sì, ho provato e non funziona –

+0

e per quanto riguarda 'USERAGENT'? 'curl_setopt ($ curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/537.36 (KHTML, come Gecko) Chrome/41.0.2225.0 Safari/537.36');' – scoolnico

risposta

3

ho trovato una soluzione:

EventListener

$tokenController = new FOS\OAuthServerBundle\Controller\TokenController($this->oauth2); // $this->oauth2 is the @fos_oauth_server.server service 
$credentials = $tokenController->tokenAction($request); 
$response = $credentials->getContent(); 

Questa è solo un'altra soluzione per accedere nel mio API, whithout utilizzando cURL e l'URL che danno il token.