php curl_exec returns 响应为 1

php curl_exec returns response as 1

我正尝试按照以下代码片段使用 curl。我已经尝试了所有可以搜索类似问题的选项。已经添加了所有可用的 setopt 选项,但我仍然得到 1 的响应。我正在尝试 post 请求服务器并期待 json 响应。我错过了什么?

 $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));

已更新解决方案: 正如建议的那样,只使用 print_r($curl_response, true) 来记录响应,并使用 print_r($decoded['orderId']) 来获取特定值。

print_r() 打印它的输出,它没有return吧。为了将调用 print_r() 的输出存储在变量中,或将其发送到记录器或诸如此类的东西,您需要传递一个真值作为第二个参数。

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

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

注意:由于您已将 CURLOPT_RETURNTRANSFER 设置为 true,因此对 curl_exec() 的调用将已经 return 一个字符串。确实没有必要通过 print_r() 传递它,只需转储字符串即可。

另请注意:您需要验证 json_decode() 是否 return null。您可能还想验证 HTTP 状态代码是否为 200(您可以通过 curl_getinfo().