2016-09-15 4 views
1

これを端末で実行すると(実際のAPI IDを使用している場合)、正常に動作します。PHP(localhost)からWufoo APIに接続できませんが、端末カールを使用して接続できます。OK

:それは、常に次のようなデータとなる「失敗したコール」を返します

$curl = curl_init('https://myaccountid.wufoo.com/api/v3/forms.json'); 

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_USERAGENT, 'Wufoo Form Getter'); 
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($curl, CURLOPT_USERPWD, 'MYAPIID:footastic'); 

$response = curl_exec($curl); 
$resultStatus = curl_getinfo($curl); 
if ($resultStatus['http_code'] == 200) { 
    $result = json_decode($response, true); 
} else { 
    $result = 'Call Failed ' . print_r($resultStatus, true); 
} 

echo "<pre>"; 
print_r($result); 
echo "</pre>"; 

:これを使用して

curl -u "MYAPIID":"footastic" "https://myaccountid.wufoo.com/api/v3/forms.json" 

私は自分のローカルサーバ(ローカルホスト)上のPHPで同じ結果を取得しようとしています

Call Failed Array 
(
    [url] => https://myaccountid.wufoo.com/api/v3/forms.json 
    [content_type] => 
    [http_code] => 0 
    [header_size] => 0 
    [request_size] => 0 
    [filetime] => -1 
    [ssl_verify_result] => 1 
    [redirect_count] => 0 
    [total_time] => 0.216174 
    [namelookup_time] => 4.1E-5 
    [connect_time] => 0.215999 
    [pretransfer_time] => 0 
    [size_upload] => 0 
    [size_download] => 0 
    [speed_download] => 0 
    [speed_upload] => 0 
    [download_content_length] => -1 
    [upload_content_length] => -1 
    [starttransfer_time] => 0 
    [redirect_time] => 0 
    [redirect_url] => 
    [primary_ip] => 75.98.93.66 
    [certinfo] => Array 
     (
     ) 

    [primary_port] => 443 
    [local_ip] => 192.168.0.9 
    [local_port] => 54355 
) 

ターミナルでは正常に動作しますが、PHPでは正常に動作しないのはなぜですか?どのようにこれを動作させるためにどのようなアイデア?

答えて

0

コードからcurl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);を削除してください。カール文書ごとのように:

CURLAUTH_ANY 

This is a convenience macro that sets all bits and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure. 

あなたのコードでcurl_setopt($curl, CURLOPT_VERBOSE, true);を使用する場合、あなたはそれがヘッダーで基本認証を送信していないことがわかります。しかし、私が言及したようにその行を削除すると、それが動作していることがわかります。

また、-vオプションを使用してcurlコマンドを実行することもできます。デバッグプリントが表示されます。コマンドラインとコードのリクエストヘッダーを一致させるのに役立ちます。

関連する問題