我在Mac OSX上使用MAMP Pro 1.9.4
在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
我的脚本是从Google apis中对lat进行地理编码。 它在我的托管服务提供商服务器上在线工作,但在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";
}
答案 0 :(得分:34)
这不是关于代理,而是关于如何使用googleapis。
添加CURLOPT_SSL_ on
您的代码并将其设置为false
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
答案 1 :(得分:5)
这可能是防火墙问题。默认情况下,Curl尝试使用端口1080,该端口可能未在您的localhost /路由器/ ISP上打开。
答案 2 :(得分:3)
您可能需要为$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
答案 3 :(得分:2)
在具有自签名证书的本地服务器(例如 XAMPP)上,您必须使用:
curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false);
<块引用>
注意:尽管测试环境不安全,但它解决了问题。
记得为生产服务器激活!!!
答案 4 :(得分:1)
在MAMP中,如果在连接到HTTPS主机时遇到错误,只需设置此选项:
curl_setopt($ ch,CURLOPT_SSLVERSION,3);
等效命令行是:
curl -k -ssl3 https://www.your-secure-host.com
答案 5 :(得分:0)
你真的安装了curl
二进制文件吗?您可以使用PHP安装curl
库,而无需在系统上实际使用curl
二进制文件。切换到shell提示符并键入curl
。 (如果它是OSX的标准,请原谅我的无知 - 我不是Mac人)
答案 6 :(得分:0)
如果您在代理后面,可以尝试添加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);
希望这有帮助。