2017-11-01 8 views
1

다음 코드 스 니펫과 같이 curl을 사용하려고합니다. 나는 이미 비슷한 문제를 찾을 수있는 모든 옵션을 시도했다. 모든 setopt 옵션을 추가했지만 여전히 1로 응답을받습니다. 서버에 대한 요청을 게시하고 json 응답을 기대하고 있습니다. 내가 뭘 놓치고 있니? 응답을 기록 제안 만 사용 인 print_r ($의 curl_response, TRUE)로 을하고, 사용 인 print_r (디코딩 $ [ 'ORDERID']) 특정 값을 얻을 수 있습니다 : PHP curl_exec가 1로 응답을 반환합니다.

$logger->info('url:'.$service_url); 
    $curl = curl_init(); 
    $curl_post_data = array(
     'username' => 'user1', 
     'password' => 'welcome' 
    ); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl, CURLOPT_POSTFIELDS,$curl_post_data); 
    curl_setopt($curl, CURLOPT_URL, $service_url); 
    curl_setopt($curl, CURLOPT_HTTPGET, true); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl,CURLOPT_POST, 1); 
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($curl,CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,3); 
    curl_setopt($curl,CURLOPT_TIMEOUT, 20); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
     'Content-Type: application/json', 
     'Accept: application/json' 
    )); 

    $curl_response = curl_exec($curl); 

    if ($curl_response === false) { 
     $info = curl_getinfo($curl); 
     curl_close($curl); 
     die('error occured during curl exec. Additioanl info: ' . var_export($info)); 


    } 
    curl_close($curl); 
    $logger->info('curl_response 11:'.print_r($curl_response)); 
    $decoded = json_decode($curl_response,JSON_PRETTY_PRINT); 
    if (isset($decoded->response->status) && $decoded->response->status == 'ERROR') { 
     die('error occured: ' . $decoded->response->errormessage); 

    } 
    $logger->info('response ok!'); 
    $logger->info('decoded:'.print_r($decoded)); 

는 솔루션에 대한 업데이트되었습니다.

답변

1

print_r()인쇄 출력은, 그것을하지 반환 않습니다. print_r()에 대한 호출의 출력을 변수에 저장하거나 로거 또는 기타 등으로 보내려면 truey 값을 두 번째 매개 변수로 전달해야합니다.

$x = print_r($foo); // prints formatted $foo and returns true 

$x = print_r($foo, true); // prints nothing and returns formatted $foo 

참고 : true로 CURLOPT_RETURNTRANSFER을 설정 한 이후, curl_exec()에 대한 호출이 이미 문자열을 반환합니다. print_r()을 통과 할 필요가 없습니다. 그냥 문자열을 덤프하십시오.

참고 : json_decode()null을 반환하지 않는지 확인해야합니다. 또한 HTTP 상태 코드가 200인지 확인할 수도 있습니다 (curl_getinfo()을 통해 수행 할 수 있습니다.)

+0

주의 사항 :'mixed print_r (mixed $ expression [, bool $ return = false])'_ return 매개 변수가 TRUE 인 경우이 함수는 문자열을 반환합니다. ** 그렇지 않으면 반환 값은 TRUE입니다. ** _ _ (강조 마인) – FirstOne

+0

PHP가 '1'을 읽음에 따라 _why_가 ' true '로 설정되어 있습니다. – FirstOne

+0

답장을 보내 주셔서 감사합니다. print_r 함수를 사용하지 않으려 고합니다. 응답을 받으면 로그 파일에 응답을 기록하고 싶습니다. { " orderId ":"39018 "}. 대신 orderId를 얻으려고합니다. $ decoded = json_decode ($ curl_response); $ logger-> info ('decoded :'. $ decoded [ 'orderId']); – PPB