【问题标题】:PHP cURL Malformed Authorization header REST API Basic AuthorizationPHP cURL 格式错误的授权标头 REST API 基本授权
【发布时间】:2019-10-29 14:15:12
【问题描述】:

我尝试使用 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);

使用此代码我得到错误:

"{\"code\":400,\"result\":\"格式错误的授权 header.\",\"error\":{\"reason\":\"BadRequest\",\"message\":\"格式错误 授权标头。\"}}"

我到处寻找解决方案 herehere。所有答案都建议添加我的供应商 API 不需要的用户名和密码,只有 Api Key 和标头 Basic Auth。我做错了什么?

【问题讨论】:

    标签: php curl http-headers


    【解决方案1】:

    在 HTTP 基本身份验证中,凭据应该是 base64 编码的,您是对密钥进行 base64 编码吗?

    此外,在 http 基本身份验证中,用户名和密码由 : 分隔,您的 API 密钥应该作为用户名还是密码?你发送它是什么,你是作为用户名发送还是作为密码发送? (如果您的 api 密钥在 : 之前,那么您将其作为用户名发送,如果您的密钥在 : 之后,那么您将其作为密码发送),尝试切换它们,然后它是否有效?

    你说的是 http 基本身份验证,但如果 API 文档没有明确说明 api 密钥是作为用户名还是密码,我根本不相信他们真的在使用 http basic auth。 .

    无论如何,HTTP Basic Auth 规范可以在这里找到:https://www.rfc-editor.org/rfc/rfc7617

    【讨论】:

    • 哈,是的。 base64 拯救了这一天。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2011-05-08
    • 1970-01-01
    • 2018-09-06
    • 2016-02-20
    • 2014-01-15
    • 1970-01-01
    相关资源
    最近更新 更多