2009-12-20 5 views
8

Qualcuno sa perché potrebbe cURL in php5 essere così dannatamente lento da fallire anche a 45s timeout, scaricando qualche file kb su un server speedO'light?cURL veramente lento

Il codice è qui come richiesto (anche se ho aumentato i timeout ancora di più per lo script non fallire durante l'esecuzione e cambiato UserAgent per Mozilla/4.0 da Chrome iniziale):

$ch = curl_init('http://www.somesite.com/' . $key); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_REFERER, 'http://www.somesite.com/somereferer/'); 
// curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.39 Safari/530.5'); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 120); 
curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 600); 
+2

pubblicare il tuo codice o quella parte nel codice – dusoft

+0

Ciao e benvenuto al sito. Stai usando HTTP 1.1 o 1.0? –

+0

ok, ecco il codice e @Alix Axel, per quanto ne so il cURL invia richieste HTTP 1.1 per impostazione predefinita, non ho modificato quello – mangefort

risposta

7

hmm, potrebbe essere un poche cose, magari un po 'output dettagliato avranno un errore di qualche tipo

curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
curl_setopt($ch, CURLOPT_VERBOSE, true); // some output will go to stderr/error_log 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
$response = curl_exec($ch); 
$errStr = curl_error($ch); 
$errNum = curl_errno($ch); 
$head = curl_getinfo($ch, CURLINFO_HEADER_OUT); 
$ci = curl_getinfo($ch); 
print_r(array($head, $errStr, $errNum, $ci)); 

a volte l'agente utente cambierà il modo di un sito risponde, potrebbe essere necessario fare qualcosa di simile:

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.001 (windows; U; NT4.0; en-US; rv:1.0) Gecko/25250101'); 
+0

Grazie, ci proverò anche questo. – mangefort

+0

quel suggerimento di user-agent - roba solida – Mojowen

2

Quando si imposta un timeout CONNECT, ottengo una risposta più rapida. Tra cui questa opzione:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,1)