【问题标题】:How to post http request using digest authentication with libcurl如何使用带有 libcurl 的摘要身份验证发布 http 请求
【发布时间】:2013-05-23 22:21:12
【问题描述】:

我正在尝试执行发布请求,并且正在尝试使用摘要身份验证来执行此操作。使用libcurl,我设置了选项:

curl_easy_setopt(curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);

curl_easy_setopt(curl_handle, CURLOPT_USERPWD, "username:password");

在设置所有其他选项(帖子、网址和所有内容)之前。服务器关闭了我的连接,我认为没有生成摘要。我只是不知道如何自动获取摘要的挑战响应行为。如果我将HTTPAUTH 设置为CURLAUTH_BASICencodes 内容,我会使用VERBOSE 选项看到包含authorization = basic 的标头。有摘要没有标题。

你知道我该怎么做吗,或者你能给我一些例子吗?我真的到处找。

【问题讨论】:

    标签: c libcurl digest


    【解决方案1】:

    对于基本的POST 请求,您应该这样做:

    curl_easy_setopt(hnd, CURLOPT_USERPWD, "user:pwd");
    curl_easy_setopt(hnd, CURLOPT_HTTPAUTH, (long)CURLAUTH_DIGEST);
    curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
    

    对于多部分POST(又名multipart/form-data):

    struct curl_httppost *post;
    struct curl_httppost *postend;
    /* setup your POST body with `curl_formadd(&post, &postend, ...)` */
    curl_easy_setopt(hnd, CURLOPT_USERPWD, "user:pwd");
    curl_easy_setopt(hnd, CURLOPT_HTTPPOST, post);
    curl_easy_setopt(hnd, CURLOPT_HTTPAUTH, (long)CURLAUTH_DIGEST);
    curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
    

    专业提示:使用curl 命令行工具和--libcurl request.c:它将用于执行相应请求的选项列表输出到此C 文件中。

    【讨论】:

    • 我试过了,但它不能正常工作...我应该收到挑战,但我没有收到任何东西,我必须在您发送给我的代码之后编写更多代码吗?我必须设置标题或类似的东西吗?
    • 那你应该有服务器端的问题。当然,您必须设置CURLOPT_URL 选项,否则这就是您所需要的。而且我确实确认它有效(例如,请参阅这些real world examples)。我再次建议您在命令行、您自己的服务上使用--libcurl out.c 选项执行相同的请求:它将输出您需要的所有内容。
    • 是的!现在它起作用了!正如您所建议的,这是服务器的问题。非常感谢你,我的朋友,祝你有美好的一天。
    • @Gioia 看来您发现这个答案很有用,如果是这样,您应该考虑accepting it
    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多