当前位置: 首页 > 知识库问答 >
问题:

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

上官联
2023-03-14

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

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

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

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

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

错误401“

我从这里尝试了投票最高的答案:如何使用带有PHP curl的HTTP基本身份验证发出请求?我已经尝试过了:https://thisinterestsme.com/php-curl-http-auth/

-

我定义了用户名和密码。我使用的代码:

$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”,算法=MD5,qop=“auth”“变化:接受语言,接受字符集严格传输安全:最大年龄=16000000升级:h2连接:升级接受范围:字节传输编码:分块内容类型:文本/html;字符集=utf-8内容语言:en”

打印$返回不显示任何内容...

共有2个答案

柳玄裳
2023-03-14

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

$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);
颜君浩
2023-03-14

你的网站根本没有使用HTTP Basic Auth,它使用的是摘要访问身份验证,google CURLAUTH\u Digest,

curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_DIGEST);
 类似资料:
  • 问题内容: 因此,我正在使用RESTeasy和Google App Engine开发REST Web服务。我的问题与GAE无关,但我提到它只是为了以防万一。碰巧的是,我自然需要保护自己的资源和我自己的用户(而不是Google的用户)。 REST Web服务的安全似乎是一个很有争议的主题,或者至少是一个非常“自由的”主题。REST对此没有施加任何标准。根据我在网络和文献上的研究,至少有3种方法适合我

  • 在浏览器中直接键入下面的url,它可以工作, 但是,当我使用相同的url,用于selenium网络驱动程序测试时,它连接到 以及请求HTTP身份验证。我是否需要更改chrome浏览器中的任何设置,或调整默认配置文件?

  • 于是我在这里看到:https://firebase . Google . com/docs/auth/web/account-linking # link-auth-provider-credentials-to-a-user-account现在可以在Firebase中链接用户账号了。我还看到Firebase提供了匿名认证的功能,它为一个用户创建一个用户会话,不需要任何凭证。 在我们的应用程序中,

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 如何在邮递员中设置curl摘要身份验证? 例如 curl 命令: 我尝试在邮递员中使用摘要式身份验证以及基本身份验证。摘要身份验证返回 401,而基本身份验证返回 500。所以我想说基本身份验证不是正确的。 在digest auth中,我设置了以下选项。 其他一切都保持默认。我还选中了“将帮助程序数据保存到请求”复选框和“更新请求”按钮。 仍然得到401。 根据响应,我得到了一个、和一个。我以前没

  • 问题内容: 我正在尝试创建一个J2ME应用程序,该应用程序使用连接器与Web服务器通信。 当我与WebServer交谈时,我必须使用基本HTTP身份验证进行身份验证,通常这种方式类似于 但是在J2ME中,当我构造这种形式的url时,它不起作用。 我也尝试添加请求属性, 但是没有用 有人以前做过基于j2me的HTTP身份验证吗?提前致谢。 问题答案: 可能是J2ME不支持基本身份验证,我可能错了。如