callapi - PHP Curl no funciona en localhost?
php curl patch (6)
¿Realmente tienes el binario curl
instalado? Puede tener la biblioteca curl
instalada con PHP sin tener el binario curl
en su sistema. Colocar en un indicador de shell y escribir curl
. (Si es estándar en OSX, perdona mi ignorancia, no soy un Mac)
Estoy usando MAMP Pro 1.9.4 en Mac OSX
En phpinfo()
veo que curl está habilitado
cURL support enabled
cURL Information 7.20.0
Age 3
Features
AsynchDNS No
Debug No
GSS-Negotiate No
IDN Yes
IPv6 Yes
Largefile Yes
NTLM Yes
SPNEGO No
SSL Yes
SSPI No
krb4 No
libz Yes
CharConv No
Protocols dict, file, ftp, ftps, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, smtp, smtps, telnet, tftp
Host i386-apple-darwin8.11.1
SSL Version OpenSSL/0.9.7l
ZLib Version 1.2.3
Mi script es para geocodificar lat tiempo desde Google Apis. Funciona en línea en mi servidor de proveedores de alojamiento pero no en localhost ... ¿POR QUÉ?
$latlng = "44.3585230889,8.57745766643";
$lang = "it";
$geocodeURL = "http://maps.googleapis.com/maps/api/geocode/json?latlng=$latlng&sensor=false&language=$lang";
$ch = curl_init($geocodeURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == 200) {
$geocode = json_decode($result);
$location = $geocode->results[0]->address_components[0]->long_name;
$city = $geocode->results[0]->address_components[1]->long_name;
$province = $geocode->results[0]->address_components[2]->long_name;
$region = $geocode->results[0]->address_components[3]->long_name;
$country = $geocode->results[0]->address_components[4]->long_name;
$geo_status = $geocode->status;
$geo_str = "$location, $city, $province, $region, $country";
} else {
$geo_status = "HTTP_FAIL_$httpCode";
$geo_str = "Failed: $geo_status";
}
En MAMP, si está obteniendo errores al conectarse a hosts HTTPS, simplemente configure esta opción:
curl_setopt ($ ch, CURLOPT_SSLVERSION, 3);
El equivalente por línea de comando es:
curl -k -ssl3 https://www.your-secure-host.com
Es posible que deba configurar la versión SSL y el cifrado correspondiente para $ch
:
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, ''TLSv1'');
Para conocer los parámetros exactos que puede pasar a CURLOPT_SSLVERSION
consulte: http://php.net/manual/en/function.curl-setopt.php
También lo siguiente puede mostrar los errores relacionados con las versiones SSL que se usan para ayudar a encontrar el conflicto de versión exacto que tiene:
$error = curl_error($ch);
echo $error;
Más sobre este comando: http://php.net/manual/en/ref.curl.php
Es probable que sea un problema de cortafuegos. Por defecto, Curl intenta usar el puerto 1080, que probablemente no esté abierto en su servidor / enrutador / ISP local.
No se trata de proxy, se trata de cómo usar googleapis.
Agrega CURLOPT_SSL_ on
tu código y configúralos en false
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
Si está detrás de un proxy, podría intentar agregar CURLOPT_PROXY
, por ejemplo (asumiendo que su proxy está en el puerto 3128 192.168.1.2):
$ch = curl_init($geocodeURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, "192.168.1.2:3128");
$result = curl_exec($ch);
Espero que esto ayude.