J'utilise MAMP Pro 1.9.4 sur Mac OSX
Dans phpinfo()
Je vois que curl est activé
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
Mon script est de géocoder les lat depuis Google apis. Il fonctionne en ligne sur mon serveur d'hébergement mais pas sur localhost .. POURQUOI ??
$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";
}
C'est probablement un problème de pare-feu. Curl par défaut essaie d'utiliser le port 1080, qui n'est probablement pas ouvert sur votre hôte local/routeur/FAI.
Il ne s'agit pas de proxy, il s'agit de savoir comment utiliser googleapis.
Ajouter CURLOPT_SSL_ on
votre code et définissez-le dans false
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
Vous devrez peut-être définir la version SSL et le chiffrement correspondant pour $ch
:
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
Pour les paramètres exacts, vous pouvez passer à CURLOPT_SSLVERSION
voir: http://php.net/manual/en/function.curl-setopt.php
De plus, les éléments suivants peuvent afficher des erreurs liées aux versions SSL utilisées pour aider à trouver le conflit de version exact que vous avez:
$error = curl_error($ch);
echo $error;
Plus d'informations sur cette commande: http://php.net/manual/en/ref.curl.php
Dans MAMP, si vous obtenez des erreurs lors de la connexion aux hôtes HTTPS, définissez simplement cette option:
curl_setopt ($ ch, CURLOPT_SSLVERSION, 3);
L'équivalent par ligne de commande est:
curl -k -ssl3 https://www.your-secure-Host.com
Si vous êtes derrière un proxy, vous pouvez essayer d'ajouter CURLOPT_PROXY
, par exemple (en supposant que votre proxy est sur le port 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);
J'espère que cela t'aides.
Avez-vous réellement le binaire curl
installé? Vous pouvez avoir la bibliothèque curl
installée avec PHP sans avoir réellement le binaire curl
sur votre système. Passez à une invite du shell et tapez curl
. (Si c'est standard sur OSX, veuillez pardonner mon ignorance - je ne suis pas un Mac)