2016-09-15 3 views
1

이것을 터미널에서 실행하면 (물론 실제 API를 사용하여) 잘 작동합니다.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);을 제거하십시오. 컬 문서에 따라 : 당신은 당신의 코드에서 curl_setopt($curl, CURLOPT_VERBOSE, true);를 사용하는 경우 다음 당신이 헤더에 기본 인증을 전송하지 않는 것을 볼 수 있습니다

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. 

. 그러나 내가 언급 한 것처럼 그 행을 제거하면, 그것이 효과가 있다는 것을 알 수 있습니다.

-v 옵션을 사용하여 curl 명령을 실행할 수도 있습니다. 그것은 당신에게 디버그 프린트를 보여줄 것입니다. 커맨드 라인과 코드의 요청 헤더를 일치시키는 데 도움이 될 것입니다.