我尝试使用curl Basic Auth向我的供应商API发出HTTP请求:
//Server url
$url = "https://api.example.com/store/products?status=all&offset=0&limit=50";
$apiKey = 'xxxxxxx'; // apikey
$headers = array(
'Authorization: Basic '.$apiKey
);
// Send to Server
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Get response
$response = curl_exec($ch);
// Encode : decode returns string error so use encode
echo $result = json_encode($response);
使用此代码,我得到了错误:
“ {\”代码\“:400,\”结果\“:\”格式错误的授权 标头。\“,\”错误\“:{\”原因\“:\” BadRequest \“,\”消息\“:\”格式错误 授权标头。\“}}”
我到处都在寻找解决方案here和here。所有答案都建议添加用户名和密码,而我的供应商API则不需要,只需添加Api密钥和标头“基本身份验证”即可。我在做什么错了?
答案 0 :(得分:1)
在HTTP Basic Auth中,凭据应该是base64编码的,您是对base64编码的密钥吗?
此外,在http basic auth中,用户名和密码用:
分隔,您的API密钥应该用作用户名还是密码?以及将其作为什么发送,是以用户名发送还是以密码发送? (如果您的api密钥位于:
之前,则以用户名的形式发送;如果您的密钥位于:
之后,则以用户名的形式发送),请尝试将其切换,可以吗?
,您说的是http基本身份验证,但是如果API文档未明确说明api密钥是否用作用户名或密码,我不相信它们确实在使用http basic auth
全部。
无论如何,可以在以下位置找到HTTP基本身份验证规范:https://tools.ietf.org/html/rfc7617