代码之家  ›  专栏  ›  技术社区  ›  PPB

php curl\u exec将响应返回为1

  •  4
  • PPB  · 技术社区  · 7 年前

    我试图使用curl,如下代码片段所示。我已经尝试了所有可以搜索类似问题的选项。已经添加了所有可用的setopt选项,但仍然得到1的响应。我正在尝试向服务器发送请求,并期待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\u r($curl\u response,true)记录响应,并使用print\u r($decoded['orderId')获取特定值。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Alex Howansky    7 年前

    print_r() 打印 回来 它为了存储调用的输出 print\u r() 在变量中,或将其发送给记录器或诸如此类的对象,您需要传递一个truthy值作为第二个参数。

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

    注意:由于您已设置 CURLOPT_RETURNTRANSFER 为了实现这一点,需要 curl_exec() print\u r() ,只需转储字符串。

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