2011-04-14 6 views
7

REST를 사용하는 API에 json 객체를 게시하는 데 어려움이 있습니다. 나는 cURL을 처음 사용하지만, 내 문제에 대한 답변을 찾기 위해 온통 검색했지만 부족한 부분이 있습니다. 내 cURL 요청은 항상 false를 반환합니다. 나는 여전히 json 객체를 게시하지 않는다는 것을 알고 있습니다. 왜냐하면 나는 여전히 url로부터 응답을 얻을 것이기 때문입니다. 내 코드는 아래와 같습니다.cURL PHP RESTful 서비스가 항상 FALSE을 반환합니다.

어떤 생각

<?php 

//API KEY = APIUsername 
//API_CODE = APIPassword 
$API_Key = "some API key"; 
$API_Code = "some API code"; 
$API_email = "[email protected]"; 
$API_password = "ohhello"; 
$url = "http://someURL.com/rest.svc/blah"; 


$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 
header('Content-type: application/json'); 
$authData = "{\"APIUsername\":\"$API_Key\",\"APIPassword\":\"$API_Code\",\"EmailAddress\":\"$API_email\",\"Password\":\"$API_password\"}"; 
curl_setopt($ch, CURLOPT_POSTFIELDS, $authData); 

//make the request 
$result = curl_exec($ch); 
$response = json_encode($result); 
echo $response; 

curl_close() 
?> 

은 $ 응답을 반환 그냥 "거짓"? 이 $result에 false (즉, 실패)를 반환하기 때문에

답변

24

$response이 거짓 일 가능성이 높습니다. cURL 오류를 보려면 curl_error($ch) (curl_exec 호출 후)을 반향하십시오 (문제가있는 경우).

다른 메모에서 CURLOPT_POSTFIELDS의 형식이 잘못된 것 같습니다. JSON 문자열을 전달하지 마십시오.

This parameter can either be passed as a urlencoded string like 'para1=val1&para2=val2&...' or as an array with the field name as key and field data as value.

-- PHP docs for curl_setopt()


업데이트

는 SSL 오류를 방지하는 가장 빠른 방법은이 옵션을 추가하는 것입니다

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

당신은 SSL 검증 오류를 때문에 컬, 브라우저와는 달리, 미리로드 된 신뢰할 수있는 인증 기관 (CA) 목록이 없으므로 기본적으로 SSL 인증서가 신뢰되지 않습니다. 빠른 해결책은 위의 줄을 사용하여 인증없이 인증서를 수락하는 것입니다. 더 나은 해결책은 수락하려는 인증서 또는 CA 만 수동으로 추가하는 것입니다. 자세한 내용은 this article on cURL and SSL을 참조하십시오.

+0

curl_error ($ ch)에서 아래 메시지가 표시됩니다. 내가 게시하려고하는 URL에 문제가 있습니까? "SSL 인증서 문제, CA 인증서가 올바른지 확인하십시오. 세부 정보 : 오류 : 14090086 : SSL 루틴 : SSL3_GET_SERVER_CERTIFICATE : 인증서 확인 실패" – stekrose

+1

꽤 일반적인 것 같습니다. 'curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false);'시도해보십시오. – Wiseguy

+0

완벽한 작업. 도와 주셔서 감사합니다! – stekrose