2015-09-09 20 views
5

Sto tentando di inviare una richiesta di arricciatura a googleapis, per recuperare le informazioni di un utente. Quando uso uno script php per inviare la richiesta cURL, ci vogliono 5 secondi per completare, tuttavia, quando provo a inviare la stessa richiesta direttamente dal server con un comando di arricciatura, il risultato ritorna istantaneamente.Curl da php richiede più tempo di curl via stucco

Ecco lo script php che uso:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://www.googleapis.com/oauth2/v2/userinfo"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Authorization: Bearer '.$accessToken)); 
$output=curl_exec($ch); 

E qui è il comando che ho usato ricciolo con stucco:

curl --header "Authorization: Bearer xxxxxx" https://www.googleapis.com/oauth2/v2/userinfo 

Quale potrebbe essere il problema?

NOTA: Lo script PHP viene eseguito sullo stesso server da cui ho emmited il comando ricciolo via stucco

NOTA 2: Questo potrebbe essere un qualche tipo di problema di ricerca DNS? Inizialmente, l'esecuzione di questo stesso comando tramite riga di comando richiedeva circa 5 secondi, perché www.googleapis.com non era nel nostro server DNS. Da allora, l'abbiamo aggiunto manualmente e la funzione della riga di comando è molto più veloce. Che tipo di informazioni DNS utilizza PHP, se aggiorno le informazioni DNS sul server, viene automaticamente aggiornato anche per PHP?

NOTA 3: dig www.googleapis.com restituisce il seguente:

; < < >> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 < < >> www.googleapis.com
;; opzioni globali: + cmd
;; Risposta:
;; - >> HEADER < < - opcode: QUERY, stato: NOERROR, id: 5273
;; bandiere: qr rd ra; QUERY: 1, RISPOSTA: 2, AUTORITÀ: 0, AGGIUNTIVO: 0

;; SEZIONE DOMANDA:
; www.googleapis.com. IN A

;; SEZIONE RISPOSTA:
www.googleapis.com. 1536 IN CNAME googleapis.l.google.com.
googleapis.l.google.com. 172 IN A 216.58.218.170

;; Tempo di interrogazione: 0 msec
;; SERVER: 10.0.80.11 # 53 (10.0.80.11)
;; QUANDO: Wed Set 9 14:35:04 2015
;; MSG SIZE rcvd: 89

+1

Come stai eseguendo il codice PHP? Presumo che entrambi abbiano successo? –

+0

Entrambi hanno esito positivo, entrambi restituiscono esattamente la stessa risposta, solo la versione php impiega 5 secondi per il completamento, mentre la versione diretta richiede solo <1 secondi. Il codice php sopra è parte di uno script più grande, ma se commento l'output $ = curl_exec ($ ch); linea, l'intero script viene eseguito in meno di un secondo: | –

+1

Stai eseguendo script dalla CLI? Se è così - sei sicuro che sia un problema con l'arricciatura? Ho avuto un timeout simile di 5 secondi. E non era un problema di arricciatura, ma il ritardo di avvio di PHP. Per verificare il suo problema di avvio (in caso di cli), provare semplicemente a eseguire: php -r 'echo 1;' E controlla quanto tempo ci vuole. – Endijs

risposta

2

trovato la risposta al problema qui:

https://stackoverflow.com/a/17816201/2691879

impostazione di questa opzione, risolve il problema:

curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 

io ancora non realmente capisco perché e come funziona/succede, quindi se qualcuno si preoccupa di spiegarmelo in un'altra risposta, insieme alla soluzione di cui sopra, lo contrassegnerò come il risposta retta.