【发布时间】:2015-01-20 15:17:00
【问题描述】:
我打算用 C++ 程序用 libcurl 和 openssl 做 https 请求。
我按照文档中的描述使用 curl_global_init(CURL_GLOBAL_ALL) 初始化了 libcurl。然后我使用我初始化的curl_easy 句柄,填充标题和正文,并将所有内容发送到'https://example.com:443/foo'。它适用于非 https 连接。
Looking around 我发现可能有其他库已经获得了 SSL 上下文,这正是导致 libcurl 无法做到这一点的原因。我收到以下错误消息:
curl_easy_perform failed: Out of memory
在我的例子中,我使用的是libmicrohttpd,我用它来初始化
mhdDaemon = MHD_start_daemon(MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL,
htons(port),
NULL,
NULL,
connectionTreat, NULL,
MHD_OPTION_HTTPS_MEM_KEY, httpsKey,
MHD_OPTION_HTTPS_MEM_CERT, httpsCertificate,
MHD_OPTION_CONNECTION_MEMORY_LIMIT, memoryLimit,
MHD_OPTION_SOCK_ADDR, (struct sockaddr*) &sad,
MHD_OPTION_NOTIFY_COMPLETED, requestCompleted, NULL,
MHD_OPTION_END);
所以我确实在其他地方使用了 openSSL。问题是,如果我取出 MHD_USE_SSL 部分,它并不能解决问题。
这是链接到应用程序的库列表(我正在使用 cmake):
-lmicrohttpd
-lmongoclient
-lboost_thread
-lboost_filesystem
-lboost_system
-lpthread
还有其他可以加载 SSL 的吗?即使我注释掉 MHD_USE_SSL 标志(以及所有其他相关标志),microhttpd 是否仍然会加载它?这个错误还有其他原因吗?
【问题讨论】:
-
我在将 Curl 和 OpenSSL 与其他也使用 OpenSSL 的库结合使用时没有遇到问题。