使用 libcurl 执行 HTTP POST - 摘要式身份验证,使用 curl_easy_send\ curl_easy_recv

Posted

技术标签:

【中文标题】使用 libcurl 执行 HTTP POST - 摘要式身份验证,使用 curl_easy_send\\ curl_easy_recv【英文标题】:Perform HTTP POST with libcurl - digest authentication, using curl_easy_send\ curl_easy_recv使用 libcurl 执行 HTTP POST - 摘要式身份验证,使用 curl_easy_send\ curl_easy_recv 【发布时间】:2010-12-09 15:02:33 【问题描述】:

我正在尝试编写一个简单的程序,它使用 libcurl 使用摘要身份验证执行 HTTP POST。

当我使用适当的curlopt_easy_setopt 调用与CURLOPT_POSTFIELDSCURLOPT_POSTFIELDSIZE 然后调用curl_easy_perform 来设置要发送的XML 缓冲区时,它工作正常。

但是,当我将 CURLOPT_CONNECT_ONLY 设置为 1 后尝试连接,然后使用 curl_easy_send - 返回代码(用于发送调用)是 CURLE_UNSUPPORTED_PROTOCOL

(当然之前用户名、密码和digest认证方案都设置成功了)。

使用嗅探器,可以明显看出根本没有执行摘要协商。

如何仍然使用curl_easy_send\ curl_easy_recvCURLOPT_CONNECT_ONLY,但让libcurl 执行摘要协商?

提前致谢。

【问题讨论】:

【参考方案1】:

嗯,这毕竟是不可能的。

curl_easy_sendcurl_easy_recv 用于实现自定义协议。

因此,我认为正在发生的事情是 libcurl 将为 curl_easy_perform 执行的正常 HTTP 协议处理根本没有完成,因此没有可用的摘要\NTLM\GSS 协商。

希望对大家有所帮助。

【讨论】:

以上是关于使用 libcurl 执行 HTTP POST - 摘要式身份验证,使用 curl_easy_send\ curl_easy_recv的主要内容,如果未能解决你的问题,请参考以下文章

libcurl get和post的区别

libcurl封装http请求工具类

基于libcurl的POST(http)

C/C++使用libcurl库发送http请求(get和post可以用于请求html信息,也可以请求xml和json等串)

基于libcurl的GET与POST(HTTP1.1)

c用libcurl库实现https下get/post网络通信