web-dev-qa-db-ja.com

PHP Curlはlocalhostで機能しませんか?

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 APIから緯度経度をジオコーディングすることです。ホスティングプロバイダーのサーバーではオンラインで機能しますが、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";
}
17
FFish

おそらくファイアウォールの問題です。デフォルトでは、Curlはポート1080を使用しようとしますが、おそらくローカルホスト/ルーター/ ISPで開いていません。

6
Dan Crews

プロキシについてではなく、googleapisの使用方法についてです。

追加 CURLOPT_SSL_ onコードをfalseに設定します

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

$chのSSLバージョンと一致する暗号を設定する必要がある場合があります。

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

MAMPでは、HTTPSホストへの接続時にエラーが発生する場合は、このオプションを設定するだけです。

curl_setopt($ ch、CURLOPT_SSLVERSION、3);

コマンドラインでこれに相当するものは次のとおりです。

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

1
CSM Inc

プロキシの背後にいる場合は、たとえば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
Riyono

実際にcurlバイナリがインストールされていますか? curlライブラリをPHPでインストールすることができます。実際にはシステムにcurlバイナリがありません。シェルプロンプトにドロップし、curlと入力します(OSXの標準の場合は、無視してください-I Macの男ではない)

0
Crontab