2012-12-10 19 views
7

Sto provando a creare un proxy API per la mia applicazione, ma sto ricevendo alcuni strani errori di timeout su Heroku.Heroku - Timeout su cURL (PHP)

L'ha detto quanto segue:

2012-12-10T12:49:24+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path=/api/v1/users/me host=host.herokuapp.com fwd=174.129.79.221 dyno=web.1 queue= wait= connect= service=30000ms status=503 bytes=0 

Il codice è simile al seguente:

$request = curl_init(); 
curl_setopt($request, CURLOPT_URL, $url); 
curl_setopt($request, CURLOPT_USERAGENT, 'AppProxy/1.0'); 
curl_setopt($request, CURLOPT_HTTPHEADER, array(
    'Accept: application/json', 
    'Authorization: Basic ' . $authorization, 
    'X-Requested-With: XMLHttpRequest' 
)); 
curl_setopt($request, CURLOPT_VERBOSE, 1); 
curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, 0); 
$response = curl_exec($request); 
echo curl_errno($request) . "<br />"; 
echo curl_error($request) . "<br />"; 
echo $httpStatus = curl_getinfo($request, CURLINFO_HTTP_CODE) . "<br />"; 
curl_close($request); 
echo $response . "<br />"; 

C'è qualcosa che non va o che mi manca qualcosa sul codice per ottenere questo lavoro? Qualcuno ha avuto lo stesso problema su Heroku?

Grazie in anticipo ...

+0

Potrebbe fornire maggiori dettagli su * proxy API * e la differenza esatta tra il normale utilizzo dell'API. – Ranty

+0

@William Lepinski Hai mai capito cosa stava succedendo? Sto facendo lo stesso errore quando provo a cURL un endpoint PHP locale. –

risposta

1

provare a impostare un timeout su vostra richiesta cUrl in questo modo

curl_setopt($request, CURLOPT_CONNECTTIMEOUT, 15); 

Quanto tempo ci vuole per wget la stessa risorsa dalla scatola è in esecuzione su?

Anche il codice 503 è un errore di servizio non disponibile. Puoi aprire la risorsa nel tuo browser?

+0

La stessa richiesta, fatta su Postman per esempio, ha richiesto solo 180ms. –

+0

Forse la scatola di heroku non può raggiungere l'altra casella. Se riesci a ssh nella casella di heroku, prova da lì qualche diagnostica. –

+0

L'altra casella in questo caso è la stessa casella. Sto solo avvolgendo la richiesta con alcuni dati sensibili che non possono essere sul lato client. Funziona come un proxy, ma la richiesta viene inviata insieme all'APIKey dell'utente registrato (sì, sto facendo un'app JS a pagina singola). Sembra che Heroku abbia alcune politiche di sicurezza per le richieste fatte sul lato server usando CURL. –