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:
- mi collegare nella mia app attraverso un modulo
- Quando sto correttamente il login mia app, un listener di evento viene attivato
- accedo l'URL che mi fornisce il token API li risparmio tali credenziali nella sessione utente
- 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!
Hai provato a impostare 'CURLOPT_TIMEOUT'? E.g: 'curl_setopt ($ curl, CURLOPT_TIMEOUT, 60);' – scoolnico
Grazie per la risposta, ma sì, ho provato e non funziona –
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