使用 Digest Auth 并通过 curl 发送 POST 数据

Posted

技术标签:

【中文标题】使用 Digest Auth 并通过 curl 发送 POST 数据【英文标题】:Using Digest Auth and Sending POST data with curl 【发布时间】:2012-10-18 06:23:50 【问题描述】:

我有一个关于使用 curl 的 HTTP Digest Auth 以及同时发送帖子数据的问题。

我有一个 REST API,其中的每个资源都需要身份验证。我使用 php curl 从我的网站访问我的资源。每个资源都需要使用摘要进行身份验证。

我为此使用了 CURLAUTH_DIGEST,它通常就像一个魅力。

问题是当我尝试使用 CURLOPT_POSTFIELDS 在 POST 中发送其他数据时,该数据不会与摘要身份验证信息一起发送。 这是为什么呢?我该如何解决这个问题?

我正在使用 PHP 5.4.3 和 php curl 7.25.0

【问题讨论】:

【参考方案1】:

将Digest认证与POST请求结合起来绝对没有问题。

请务必仔细检查您是否应该这样做:

    基本POST(相当于-X POST -d 'body-content-here'curl CLI), 或multipart POST(例如-F image_file=@"foo.jpg" 用于上传给定文件)。

另外,我强烈推荐的是通过curl 命令行工具与您的 API 进行交互并使用--libcurl request.c:它将在此输出 C 文件中写入用于执行请求的所有选项的方便回顾,然后你只需要在你身边复制/调整它们。

最后,请随意参考这个PHP code sample,它说明了如何执行此类调用。

【讨论】:

我有以下结构: $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); curl_setopt($ch, CURLOPT_USERPWD, 'test:test'; curl_setopt($ch, CURLOPT_URL, $myUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $parameterString); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); POST 数据到服务器为空。 如建议您可以在命令行中使用curl 成功执行相同的请求吗? (如果不是仔细检查您的网络服务)。 $parameterString 设置正确吗? 勾选,使用digest时不会发送POST数据,使用basic时会正确发送。我使用 curl 7.28 作为命令行。我也注意到了一些事情,就像它试图做 2 个请求:第一个用于 Auth 请求,第二个用于数据(但找不到它),但我不确定。 与 2 个请求相比,一切正常:请参阅 how Digest authentication works。此外,我确实通过结合POSTDigest 确认您不会遇到任何错误:我工作的公司提供了具有完全相同配置的HTTP API。最后,我刚刚使用 curl 7.28.0 进行了检查,它运行良好。仔细检查您的网络服务和客户端代码。 经过多次测试,我发现 cURL 在 POST 和 Digest Auth 方面确实没有问题。我的问题在于 htaccess 文件。出于某种原因,带有 post 和 digest auth 的 curl 不适用于虚 url。关于如何解决此问题的任何想法?

以上是关于使用 Digest Auth 并通过 curl 发送 POST 数据的主要内容,如果未能解决你的问题,请参考以下文章

包含 AWK 的 CURL 脚本通过 SSH 故障打印 Docker Image Digest

具有单向加密密码的 HTTP Digest Auth

使用 net-http-digest_auth 的未知算法 MD5

无法使用bare-bones-digest库在Android中实现Digest Auth

Spring Security Basic Auth with digest over http for stateless APIs

如何使用 auth DIGEST 控制 Tomcat 中的会话到期