使用 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。此外,我确实通过结合POST
和Digest
确认您不会遇到任何错误:我工作的公司提供了具有完全相同配置的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
使用 net-http-digest_auth 的未知算法 MD5
无法使用bare-bones-digest库在Android中实现Digest Auth
Spring Security Basic Auth with digest over http for stateless APIs