Curl 有一个名为libcurl 的库,它允许您直接与 curl 交互,而无需通过命令行。以下是向 URL 发送数据的示例:
extern "C" {
#include <curl/curl.h>
}
size_t CurlReadFunction(void *ptr, size_t size, size_t nmemb, void *userdata)
{
stringstream& ssData = *(stringstream*)userdata;
string sData = ssData.str();
size_t iBytesToRead = sData.size() - ssData.tellp();
if (iBytesToRead > nmemb)
iBytesToRead = nmemb;
memcpy(ptr, sData.data() + ssData.tellp(), iBytesToRead);
ssData.seekp((size_t)ssData.tellp() + iBytesToRead);
return iBytesToRead;
}
///... then when you want to send your data
curl_global_init(CURL_GLOBAL_ALL);
CURL* pCurl = curl_easy_init();
if (!pCurl)
return;
curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 10L);
curl_easy_setopt(pCurl, CURLOPT_NOSIGNAL, 1L);
curl_easy_setopt(pCurl, CURLOPT_URL, "http://example.com/receive.php");
curl_easy_setopt(pCurl, CURLOPT_UPLOAD, 1);
curl_easy_setopt(pCurl, CURLOPT_READDATA, &ssData);
curl_easy_setopt(pCurl, CURLOPT_READFUNCTION, CurlReadFunction);
curl_easy_setopt(pCurl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)sData.size());
CURLcode eRes = curl_easy_perform(pCurl);
if(eRes == CURLE_OK)
//success
else
cout << "curl_easy_perform() failed: " << curl_easy_strerror(eRes) << "\n";
curl_easy_cleanup(pCurl);
curl_global_cleanup();
我意识到这与您想要做的完全不同,但是 curl 可以实现的任何事情都应该可以通过 libcurl API 实现。然后你链接到 libcurl.lib 就完成了。