我试图制作一个使用摘要作为身份验证的API,当我使用此命令通过curl命令行访问API时,它的工作
curl --digest --user website:website http://localhost/api/test/users
但是当使用 Guzzle 6 php库运行api客户端时使用此代码
$handler = new GuzzleHttp\Handler\CurlHandler();
$stack = GuzzleHttp\HandlerStack::create($handler); // Wrap w/ middleware
$client = new GuzzleHttp\Client(['base_uri' => 'http://localhost', 'handler' => $stack]);
try {
$request = new GuzzleHttp\Psr7\Request('GET', $req_uri, [
'auth' => ['website', 'website', 'digest']
]);
$response = $client->send($request, ['timeout' => 2]);
} catch (Exception $e) {
echo $e->getMessage();
die();
}
return $response;
它没有用,它说
401 Unauthorized`回复:{" status":false,"错误":"未经授权"}
如何解决这个问题?以及如何以正确的方式实现自定义处理程序guzzle php?
答案 0 :(得分:0)
我遇到了同样的问题,发现它可能取决于你的curl php扩展版本。我没有可能升级它,所以我必须自己处理digest auth(基本上维基百科中的信息足够https://en.wikipedia.org/wiki/Digest_access_authentication)。
您发送第一个请求并获得代码为401和“WWW-Authenticate”标题的响应(它包含生成哈希所需的一些值),然后生成“授权”标题并在您的guzzle中使用它请求。
很抱歉,我现在无法提供代码示例,如果你自己不做,可能会在以后提供:)
答案 1 :(得分:0)
我遇到了同样的问题,并且发现根本没有安装php-curl扩展名。安装后,摘要身份验证有效。要安装扩展程序类型:
sudo apt-get install php-curl