PHP Curl не работает на localhost? - PullRequest
       35

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

16 голосов
/ 07 декабря 2011

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

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

Мой скрипт для геокодирования 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";
}

Ответы [ 6 ]

34 голосов
/ 03 октября 2012

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

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

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
5 голосов
/ 07 декабря 2011

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

3 голосов
/ 27 января 2016

Возможно, вам потребуется установить версию 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

1 голос
/ 07 сентября 2013

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

curl_setopt ($ ch, CURLOPT_SSLVERSION, 3);

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

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

0 голосов
/ 07 декабря 2011

Если вы находитесь за прокси-сервером, вы можете попробовать добавить 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);

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

0 голосов
/ 07 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...