我正在尝试使用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
答案 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请求则不需要。一旦我添加了该标头并确定一个值,它便开始工作。