आपको एक कॉलबैक फ़ंक्शन की आवश्यकता है। मैं समारोह के इस प्रकार का उपयोग प्रतिक्रिया, त्रुटि पढ़ सकते हैं और अपने खुद के हेडर आपूर्ति करने में सक्षम होने के लिए:
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
std::string buf = std::string(static_cast<char *>(ptr), size * nmemb);
std::stringstream *response = static_cast<std::stringstream *>(stream);
response->write(buf.c_str(), (std::streamsize)buf.size());
return size * nmemb;
}
bool CurlGet(
const std::string &url,
const std::vector<std::string> &headers,
std::stringstream &response,
std::string &error)
{
curl_global_init(CURL_GLOBAL_ALL);
curl_slist *headerlist = NULL;
std::vector<std::string>::const_iterator it;
for (it = headers.begin(); it < headers.end(); it++) {
headerlist = curl_slist_append(headerlist, it->c_str());
}
CURL *curl = curl_easy_init();
char ebuf[CURL_ERROR_SIZE];
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1);
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, ebuf);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
CURLcode res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
curl_slist_free_all(headerlist);
if (res != CURLE_OK)
error = ebuf;
else
error.clear();
return res == CURLE_OK;
}
स्रोत
2010-04-05 09:26:53
@Mike, कुछ उदाहरण के साथ अपडेट किया गया, और सी और php, मूलतः एक ही अवधारणाओं के लिए एक लिंक:
यहाँ है कि मैं क्या कर रही अंत में समाप्त हो गया है। – YOU
@ एसमार्क, अच्छा, अच्छा लिंक! – Mike
अच्छा! संक्षिप्त, भी :) – KeatsKelleher