【问题标题】:CURL POST request is not working with headersCURL POST 请求不适用于标头
【发布时间】:2021-02-05 09:16:43
【问题描述】:

我试图向这个 API 发送一个发布请求,它返回给我 "error": "unauthorized", "error_description": "An Authentication object was not found in the SecurityContext" 当我用邮递员发送相同的请求时,它工作正常。

这是我正在使用的代码

$url = config('payhere.cancel_url');
    $postRequest = array(
        'subscription_id'=>$payhereID
    );
    $headers = array(
        'Authorization' =>'Bearer '.$accessToken,
        'Content-Type'=>'application/json'
    );
   
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    // SSL important
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$postRequest);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    

    $output = curl_exec($ch);
    
    curl_close($ch);


    $respo = $this -> response['response'] = json_decode($output);

【问题讨论】:

    标签: php laravel curl


    【解决方案1】:

    标题应定义为数组,而不是关联数组。

    另外,由于您已将 Content-Type 设置为 application/json,因此您的请求数据应表示为 JSON,这可以使用 json_encode 完成。

    $url = config('payhere.cancel_url');
    $postRequest = array(
        'subscription_id'=>$payhereID
    );
    $headers = array(
        'Authorization: Bearer '.$accessToken,
        'Content-Type: application/json'
    );
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    // SSL important
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($postRequest));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    $output = curl_exec($ch);
    
    curl_close($ch);
    
    $respo = $this->response['response'] = json_decode($output);
    

    https://www.php.net/manual/en/function.curl-setopt.php

    【讨论】:

    • 也因为'Content-Type: application/json',POSTFIELDS应该是curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($postRequest));
    • 我已经更新了我的答案以包含您的评论,谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2013-08-03
    • 2019-04-11
    • 2017-03-06
    • 2017-06-16
    • 1970-01-01
    • 2020-06-13
    相关资源
    最近更新 更多