web-dev-qa-db-fra.com

PHP Curl ne fonctionne pas sur localhost?

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";
}
17
FFish

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.

6
Dan Crews

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);
34
arbo77

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

3
Brandon Stephens

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

1
CSM Inc

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.

0
Riyono

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)

0
Crontab