Подтвердить что ты не робот

PHP Curl не работает на localhost?

Я использую MAMP Pro 1.9.4 на Mac OSX
В phpinfo() я вижу, что завиток включен

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

Мой script - это геокод lat long из Google apis. Он работает онлайн на сервере хостинг-провайдеров, но не на localhost.. ПОЧЕМУ?

$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";
}
4b9b3361

Ответ 1

Вероятно, это проблема с брандмауэром. Curl по умолчанию пытается использовать порт 1080, который, вероятно, не открыт на вашем localhost/router/ISP.

Ответ 2

Это не про прокси, а о том, как использовать googleapis.

Добавьте CURLOPT_SSL_ on ваш код и установите их в false

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

Ответ 3

Вам может потребоваться установить версию SSL и соответствующий шифр для $ch:

curl_setopt($ch, CURLOPT_SSLVERSION, 1);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');

Для точных параметров, которые вы можете передать в CURLOPT_SSLVERSION, см. http://php.net/manual/en/function.curl-setopt.php

Также могут отображаться ошибки, связанные с версиями SSL, которые используются для поиска точного конфликта версий:

$error = curl_error($ch);
echo $error;

Подробнее об этой команде: http://php.net/manual/en/ref.curl.php

Ответ 4

В MAMP, если вы получаете ошибки при подключении к хостам HTTPS, просто установите этот параметр:

curl_setopt ($ ch, CURLOPT_SSLVERSION, 3);

Эквивалент по командной строке:

curl -k -ssl3 https://www.your-secure-host.com

Ответ 5

Есть ли у вас бинарный файл curl? У вас может быть установлена ​​библиотека curl с PHP без фактического бинарного кода curl в вашей системе. Перейдите в приглашение оболочки и введите curl. (Если это стандарт на OSX, то, пожалуйста, простите мое невежество - я не парень Mac)

Ответ 6

Если вы находитесь за прокси-сервером, вы можете попробовать добавить CURLOPT_PROXY, например (если ваш прокси-сервер находится на порту 192.168.1.2 3128):

$ch = curl_init($geocodeURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, "192.168.1.2:3128");
$result = curl_exec($ch);

Надеюсь, что это поможет.