使用PHP CURL的HTTP请求,并从邮递员和curl cli获得不同的结果

时间:2019-02-12 19:52:00

标签: php curl

我正在尝试使用php中的curl通过以下代码进行GET请求。

test.php     

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://apiaddress/collection',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer 374dad6fdc005a0f17c49aeg77rbifuy48t7205hfhf7he8857c'
    ),
    CURLINFO_HEADER_OUT => true
));

$response = curl_exec($curl);
$err = curl_error($curl);

$info = curl_getinfo($curl, CURLINFO_HEADER_OUT);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo "Response code: " . $httpCode . "\nResponse body: \n" . $response . "\n";
}


curl_close($curl);
echo $info;

此请求在Postman中有效,并使用此curl命令curl -X GET \ https://apiaddress/collection -H 'Authorization: Bearer 374dad6fdc005a0f17c49aeg77rbifuy48t7205hfhf7he8857c'起作用,但是当我在cli中运行php test.php时,得到此输出。我猜我缺少标头或在某处发送了错误的标头?

  

响应码:401

     

响应正文:

     

{“类型”:“ https:// apiaddress / errors#error-unauthorized”,“ title”:“未经授权”,“ detail”:“否   提供了授权凭证。您必须提供授权   此请求的令牌。“,”状态“:401}

     

获取/ collection HTTP / 2

     

主机:apiaddress

     

接受:* / *

     

授权:Bearer 374dad6fdc005a0f17c49aeg77rbifuy48t7205hfhf7he8857c

2 个答案:

答案 0 :(得分:1)

您似乎正在localhost下运行此代码,此外还需要以下行:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

这告诉cURL不要验证您的SSL证书。

或者,如果确实有.pem证书文件,则可以使用:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($curl, CURLOPT_CAINFO, "/path/to/cacert.pem");

答案 1 :(得分:1)

事实证明,此API需要使用User-Agent标头,而Postman和curl cli似乎会自动发送这些标头,而php-curl请求则不需要。一旦我添加了该标头并确定一个值,它便开始工作。