मेरे पास होमवर्क है जहां मुझे दो HTTP प्रतिक्रियाओं की तुलना करने के लिए किसी भी तरह की आवश्यकता है। मैं इसे सी पर लिख रहा हूं और चीजों को आसान बनाने के लिए मैं libcurl का उपयोग करता हूं। मैं उस फ़ंक्शन को कॉल कर रहा हूं जो HTTP अनुरोध करने और किसी अन्य फ़ंक्शन से प्रतिक्रिया करने के लिए libcurl का उपयोग करता है, और मैं HTTP प्रतिक्रिया को char *
के रूप में वापस करना चाहता हूं। यहाँ मेरी कोड अब तक (यह दुर्घटनाओं) है:सी में, आप स्ट्रिंग में HTTP प्रतिक्रिया पढ़ने के लिए libcurl का उपयोग कैसे करते हैं?
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
char *handle_url(void) {
CURL *curl;
char *fp;
CURLcode res;
char *url = "http://www.yahoo.com";
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
//printf("\n%s", fp);
}
return fp;
}
यह समाधान C libcurl get output into a string काम करता है, लेकिन नहीं मेरे मामले में, क्योंकि मैं तो बस बुला कार्य करने के लिए स्ट्रिंग वापस जाने के लिए चाहते हैं।
कोई विचार?
'char * fp;' क्या है? आप इसे वापस क्यों कर रहे हैं? आप इसके लिए स्मृति आवंटित कैसे/कहां कर रहे हैं? मेरा चश्मा कहाँ हैं? –
लॉल। मेरे पास सी लिखने के लिए सालों थे इसलिए मैं शून्य पर वापस आ गया हूं। बात यह है कि यह "सी libcurl एक स्ट्रिंग में आउटपुट प्राप्त करने में काम कर रहा है" उदाहरण मैं ऊपर refering कर रहा हूँ। मुझे सटीक डेटा इनपुट नहीं पता है इसलिए मुझे यकीन नहीं है कि char * fp के लिए स्मृति आवंटित करने पर काम करेगा। –
आपका 'write_data' पैरामीटर के रूप में 'char * fp' पारित किया जाना चाहिए, लेकिन आपने इसे' फ़ाइल 'लेने के लिए परिभाषित किया है। साथ ही, आपको उस मामले को संभालने की आवश्यकता होगी जहां आपके 'write_func' को एक से अधिक बार बुलाया जाता है। अंत में, यदि आप उम्मीद करते हैं कि आप काम करना चाहते हैं, तो 'char * fp' को पॉइंटर पर पॉइंटर के रूप में' write_func() 'में पारित किया जाना है, ताकि आप इसे ठीक से आवंटित कर सकें। दूसरे शब्दों में, आपके 'write_func()' को 'char **' लेना चाहिए, न कि 'FILE *'। – mpontillo