错误请求400在php中使用curl发送摘要身份验证请求时出错

错误请求400在php中使用curl发送摘要身份验证请求时出错,php,curl,digest-authentication,Php,Curl,Digest Authentication,我一直试图通过curl向外部服务器发送身份验证请求,但它总是返回错误的请求。我曾尝试通过邮递员将请求直接发送到URL,在那里效果很好 下面是我正在使用的代码片段 $request = sprintf('Authorization: Digest username="%s",realm="%s",nonce="%s",cnonce="%s",nc="%s",qop="%s",op

我一直试图通过curl向外部服务器发送身份验证请求,但它总是返回错误的请求。我曾尝试通过邮递员将请求直接发送到URL,在那里效果很好

下面是我正在使用的代码片段

$request = sprintf('Authorization: Digest username="%s",realm="%s",nonce="%s",cnonce="%s",nc="%s",qop="%s",opaque="%s",uri="%s",response="%s"',
                $user, $response_realm, $response_nonce, $response_cnonce, $response_nc, $response_qop, $response_opaque, $loginURL, $authenticate_response);

$request_header = array($request);
$request_header[] = 'Content-Type: application/json';

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_header);
curl_setopt($ch, CURLOPT_URL, $loginURL);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

echo $response = curl_exec($ch);
这是来自请求的curl信息

Array
(
    [url] => https://local-customer-manager.awlengine.com/api/v4/employee/auth/
    [content_type] => text/html; charset=iso-8859-1
    [http_code] => 400
    [header_size] => 182
    [request_size] => 421
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.017697
    [namelookup_time] => 1.9E-5
    [connect_time] => 0.002964
    [pretransfer_time] => 0.013388
    [size_upload] => 0
    [size_download] => 317
    [speed_download] => 18647
    [speed_upload] => 0
    [download_content_length] => 317
    [upload_content_length] => -1
    [starttransfer_time] => 0.017688
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => 13.78.113.193
    [certinfo] => Array
        (
        )

    [primary_port] => 443
    [local_ip] => 10.0.0.10
    [local_port] => 37098
)
我想不出代码出了什么问题。我在发送请求以从服务器检索头时使用了相同的逻辑,它工作得非常好


提前感谢。

所以,
$response\u realm
$response\u nonce
是您从之前401响应的标题中获得的值,或者它们来自何处?@CBroe是的,我从之前响应的标题中获得它们。理论上,您不需要自己组装授权标题,cURL应该能够处理这个问题,如果您通过CURLOPT_USERPWD传递
CURLOPT_HTTPAUTH,CURLAUTH_DIGEST
以及用户名和密码,您尝试过了吗?是的,我以前尝试过这种方法,但它出现了404错误。因此,
$response\u realm
$response\u nonce
是您从之前401响应的头中获得的值,或者它们来自何处?@CBroe是的,我从之前响应的头中获得它们。理论上,您不需要自己组装授权头,cURL应该能够处理这个问题,如果您通过CURLOPT_USERPWD传递
CURLOPT_HTTPAUTH,CURLAUTH_DIGEST
以及用户名和密码,您尝试过了吗?是的,我以前试过这个方法,但它给出了404错误