Sono in esecuzione di PHP su una macchina virtuale CentOS sotto MacOS X e qualsiasi richiesta cURL prende costantemente 15s a correre:PHP CURL costantemente prendendo 15s per risolvere DNS
$c = curl_init('https://graph.facebook.com');
curl_exec($c); // takes 15s to return...
echo curl_getinfo($c, CURLINFO_NAMELOOKUP_TIME); // 15.01 seconds
Tuttavia, gethostbyname() è molto veloce:
echo gethostbyname('graph.facebook.com'); // almost instant
E, ping
risolve il nome quasi istantaneamente.
Per impostazione predefinita, /etc/resolv.conf
aveva solo nameserver 192.168.1.1
in esso, quindi l'ho cambiato di utilizzare i server DNS di Google:
nameserver 8.8.8.8
nameserver 8.8.4.4
ma senza fortuna. Qualche suggerimento?
Update 1: le seguenti correzioni del problema:
curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
Quindi, per quanto mi risulta, si sta cercando di risolvere sia IPv4 che IPv6, e la risoluzione IPv6 viene a mancare, dopo un timeout di 15s.
Questo a causa di una configurazione errata sulla macchina Linux?
Update 2:
dig graph.facebook.com aaaa
;; reply from unexpected source: 10.0.2.2#53, expected 192.168.1.1#53
;; reply from unexpected source: 10.0.2.2#60944, expected 192.168.1.1#53
;; reply from unexpected source: 10.0.2.2#53, expected 192.168.1.1#53
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.4 <<>> graph.facebook.com aaaa
;; global options: +cmd
;; connection timed out; no servers could be reached
Quanto tempo ci vuole se lo fai 'curl_init ('https://66.220.152.19');' –
Puoi fare una cattura di pacchetti e confermare che cURL sta segnalando questo correttamente? – Barmar
@Alex L'ho provato con l'indirizzo IP, ed è molto veloce. Sicuramente un problema DNS, come evidenziato da 'CURLINFO_NAMELOOKUP_TIME'. – Benjamin