Quando tento di utilizzare i metodi cURL di PHP per SOME URL, si verifica il timeout. Quando uso la riga di comando per lo stesso URL, funziona perfettamente.I metodi PHP cURL scadono su alcuni URL, ma la riga di comando funziona sempre
Sto usando AWS e ho una scatola t2.medium con le librerie di apache php-55 di yum.
Ecco il mio codice PHP:
function curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept-Language: en-us'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
$fh = fopen('/home/ec2-user/curllog', 'w');
curl_setopt($ch, CURLOPT_STDERR, $fh);
$a = curl_exec($ch);
curl_close($ch);
fclose($fh);
$headers = explode("\n",$a);
var_dump($headers);
var_dump($a);
exit;
return $result;
}
ecco chiamata che funziona bene:
curl('http://www.google.com');
E questa restituisce i dati per la home page di Google.
Tuttavia, provo un altro URL:
curl('http://www.trulia.com/profile/agent-1391347/overview');
e ottengo questo nel curllog:
[[email protected] Node]$ cat ../curllog
* Hostname was NOT found in DNS cache
* Trying 23.0.160.99...
* Connected to www.trulia.com (23.0.160.99) port 80 (#0)
> GET /profile/agent-1391347/overview HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36
Host: www.trulia.com
Accept: */*
Accept-Language: en-us
* Operation timed out after 10002 milliseconds with 0 bytes received
* Closing connection 0
Se corro questo dalla riga di comando:
curl -s www.trulia.com/profile/agent-1391347/overview
E ' Ritorna IMMEDIATAMENTE (entro 1 secondo) con uscita NO. Questo è previsto. Tuttavia quando eseguo questo:
curl -sL www.trulia.com/profile/agent-1391347/overview
Restituisce la pagina correttamente, proprio come vorrei.
Quindi, cosa c'è di sbagliato nel mio ricciolo?
PHP 5.5.20
Qui è il bit cURL dal mio phpinfo():
curl
cURL support => enabled
cURL Information => 7.38.0
Age => 3
Features
AsynchDNS => Yes
CharConv => No
Debug => No
GSS-Negotiate => No
IDN => Yes
IPv6 => Yes
krb4 => No
Largefile => Yes
libz => Yes
NTLM => Yes
NTLMWB => Yes
SPNEGO => Yes
SSL => Yes
SSPI => No
TLS-SRP => No
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
Host => x86_64-redhat-linux-gnu
SSL Version => NSS/3.16.2 Basic ECC
ZLib Version => 1.2.7
libSSH Version => libssh2/1.4.2
Si sta eseguendo la riga di comando dalla stessa macchina del codice php? se no, potresti voler confrontare la versione arricciata. –
qual è l'output di terminale 'curl --version'? e qual è l'output di ' php var_dump (curl_version());'? – hanshenrik
snippet IRC: https://i.imgur.com/bOwxcS3.png - ... e il tizio che ha risposto, è l'autore di (lib-) curl – hanshenrik