Php 如何修复将curl与http身份验证一起使用时出现的需要身份验证的错误401

Php 如何修复将curl与http身份验证一起使用时出现的需要身份验证的错误401,php,curl,http-status-code-401,http-authentication,Php,Curl,Http Status Code 401,Http Authentication,我使用的是一个本地php脚本,它在远程服务器上的脚本上运行curl。远程脚本受http身份验证保护 运行本地脚本时,我收到以下错误: “此服务器无法验证您是否有权访问URL“/script.php”。您提供了错误的凭据(例如,错误的密码),或者您的浏览器不知道如何提供所需的凭据 如果允许您请求文档,请检查您的用户id和密码,然后重试 如果您认为这是服务器错误,请联系网站管理员 错误401“ 我在这里尝试了投票率最高的答案: 我试过这个: ->我总是从上面收到同样的错误 我定义了$username

我使用的是一个本地php脚本,它在远程服务器上的脚本上运行curl。远程脚本受http身份验证保护

运行本地脚本时,我收到以下错误:

“此服务器无法验证您是否有权访问URL“/script.php”。您提供了错误的凭据(例如,错误的密码),或者您的浏览器不知道如何提供所需的凭据

如果允许您请求文档,请检查您的用户id和密码,然后重试

如果您认为这是服务器错误,请联系网站管理员

错误401“

我在这里尝试了投票率最高的答案: 我试过这个:

->我总是从上面收到同样的错误

我定义了
$username
$password
。我正在使用的代码:

$url = 'https://' . $page . '/script.php';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', $additionalHeaders));
print_r($additionalHeaders);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payloadName);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($ch);
print_r($return);
curl_close($ch);
在打印
$additionalHeaders
变量后,我在错误发生之前获得了以下附加信息:

“HTTP/1.1 401未经授权日期:2019年8月10日星期六22:05:26 GMT服务器:Apache WWW-Authenticate:Digest-realm=“Protected”,nonce=“Xg78fMqPBQA=8d674639fbd19b9ec67b085aa43e90be7a4c57cc”,algorithm=MD5,qop=“auth“更改:接受语言,接受字符集严格传输安全性:最大年龄=16000000升级:h2连接:升级接受范围:字节传输编码:分块内容类型:文本/html;字符集=utf-8内容语言:en“


打印
$return
不会显示任何内容…

您的网站根本没有使用HTTP基本身份验证,而是使用google
CURLAUTH\u DIGEST

curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_DIGEST);

整个工作解决方案(除了
$url
$username
$password
)如下所示:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payloadName);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($ch);
curl_close($ch);

尝试验证的漫长道路:人们报告它只对他们起作用。你的网站根本没有使用HTTP基本验证,而是使用谷歌
CURLAUTH_DIGEST
curl_setopt($ch,curlaopt_HTTPAUTH,CURLAUTH DIGEST);
谢谢你的回答@paskl和@hanshenrik!替换
curl_setopt($ch,CURLOPT_HTTPHEADER,array($Content-Type:application/xml',$additionalHeaders));
with
curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_DIGEST);
解决了问题!谢谢@hanshenrik,这解决了问题!我会投票支持你的答案,但我还不能,因为我在这里还没有足够的声誉。