Ответ 1
Вероятно, это проблема с брандмауэром. Curl по умолчанию пытается использовать порт 1080, который, вероятно, не открыт на вашем localhost/router/ISP.
Я использую 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";
}
Вероятно, это проблема с брандмауэром. Curl по умолчанию пытается использовать порт 1080, который, вероятно, не открыт на вашем localhost/router/ISP.
Это не про прокси, а о том, как использовать googleapis.
Добавьте CURLOPT_SSL_ on
ваш код и установите их в false
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
Вам может потребоваться установить версию 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
В MAMP, если вы получаете ошибки при подключении к хостам HTTPS, просто установите этот параметр:
curl_setopt ($ ch, CURLOPT_SSLVERSION, 3);
Эквивалент по командной строке:
curl -k -ssl3 https://www.your-secure-host.com
Есть ли у вас бинарный файл curl
? У вас может быть установлена библиотека curl
с PHP без фактического бинарного кода curl
в вашей системе. Перейдите в приглашение оболочки и введите curl
. (Если это стандарт на OSX, то, пожалуйста, простите мое невежество - я не парень Mac)
Если вы находитесь за прокси-сервером, вы можете попробовать добавить 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);
Надеюсь, что это поможет.