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

How to fix Authentication required error 401 when using curl with http authentication

我正在使用本地 php 脚本,该脚本 运行 在远程服务器上的脚本上卷曲。远程脚本受 http 身份验证保护。

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

"This server could not verify that you are authorized to access the URL "/script.php”。您可能提供了错误的凭据(例如,错误的密码),或者您的浏览器不了解如何提供所需的凭据。

如果您被允许请求该文件,请检查您的用户名和密码,然后重试。

如果您认为这是服务器错误,请联系站长。

错误 401

我已经从这里尝试了投票最高的答案: 我已经试过了:https://thisinterestsme.com/php-curl-http-auth/

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

我定义了 $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 Unauthorized Date: Sat, 10 Aug 2019 22:05:26 GMT Server: Apache WWW-Authenticate: Digest realm="Protected", nonce="Xg78fMqPBQA=8d674639fbd19b9ec67b085aa43e90be7a4c57cc", algorithm=MD5, qop="auth" Vary: accept-language,accept-charset 严格传输安全: max-age =16000000 升级:h2 连接:升级接受范围:字节传输编码:分块内容类型:text/html;字符集=utf-8 内容语言:en

正在打印 $return 没有显示任何内容 ...

您的网站根本没有使用 HTTP 基本身份验证,它使用的是 Digest access authentication、google CURLAUTH_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);