조성현

중간저장3

...@@ -3,18 +3,37 @@ ...@@ -3,18 +3,37 @@
3 3
4 4
5 ////////////////////////////////////////////////////////////////// 5 //////////////////////////////////////////////////////////////////
6 +// private func
7 +//////////////////////////////////////////////////////////////////
8 +size_t curl_processor::write_callback(void *contents, size_t size, size_t nmemb, void *userp) {
9 + //copy ptr
10 + std::string* p_str = (std::string*)userp;
11 +
12 + //clear
13 + if (!p_str->empty())
14 + p_str->clear();
15 +
16 + //write
17 + p_str->append((char*)contents, size*nmemb);
18 + return size*nmemb;
19 +}
20 +
21 +
22 +//////////////////////////////////////////////////////////////////
6 // constructor, destructor 23 // constructor, destructor
7 ////////////////////////////////////////////////////////////////// 24 //////////////////////////////////////////////////////////////////
8 -curl_processor::curl_processor() 25 +curl_processor::curl_processor() {
9 -{
10 curl = curl_easy_init(); 26 curl = curl_easy_init();
11 if (!curl) { 27 if (!curl) {
12 throw std::exception("failed to make curl object"); 28 throw std::exception("failed to make curl object");
13 } 29 }
30 +
31 + //set curl option
32 + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, this->write_callback);
33 + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result_buffer);
14 } 34 }
15 35
16 -curl_processor::~curl_processor() 36 +curl_processor::~curl_processor() {
17 -{
18 curl_easy_cleanup(curl); 37 curl_easy_cleanup(curl);
19 } 38 }
20 39
...@@ -22,3 +41,11 @@ curl_processor::~curl_processor() ...@@ -22,3 +41,11 @@ curl_processor::~curl_processor()
22 ////////////////////////////////////////////////////////////////// 41 //////////////////////////////////////////////////////////////////
23 // methods 42 // methods
24 ////////////////////////////////////////////////////////////////// 43 //////////////////////////////////////////////////////////////////
44 +void curl_processor::set_url(const char *url) {
45 + curl_easy_setopt(curl, CURLOPT_URL, url);
46 +}
47 +
48 +bool curl_processor::perform() {
49 + res = curl_easy_perform(curl);
50 + return (res == CURLE_OK);
51 +}
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -9,6 +9,11 @@ class curl_processor ...@@ -9,6 +9,11 @@ class curl_processor
9 private: 9 private:
10 CURL *curl; 10 CURL *curl;
11 CURLcode res; 11 CURLcode res;
12 + std::string result_buffer;
13 +
14 + //private func
15 +private:
16 + size_t write_callback(void *contents, size_t size, size_t nmemb, void *userp);
12 17
13 //constructor, destructor 18 //constructor, destructor
14 public: 19 public:
...@@ -17,7 +22,9 @@ public: ...@@ -17,7 +22,9 @@ public:
17 22
18 //methods 23 //methods
19 public: 24 public:
20 - 25 + std::string get_buffer() const { return result_buffer; }
26 + void set_url(const char *url);
27 + bool perform();
21 }; 28 };
22 29
23 #endif // CURL_PROCESSOR_H 30 #endif // CURL_PROCESSOR_H
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -2,20 +2,42 @@ ...@@ -2,20 +2,42 @@
2 #include "PaperGraphWidget.h" 2 #include "PaperGraphWidget.h"
3 #include "MainWindow.h" 3 #include "MainWindow.h"
4 4
5 +size_t write_callback(void *contents, size_t size,
6 + size_t nmemb, void *userp) {
7 + std::string* p_str = (std::string*)userp;
8 +
9 + //clear
10 + if (!p_str->empty())
11 + p_str->clear();
12 +
13 + //write
14 + p_str->append((char*)contents, size*nmemb);
15 + return size*nmemb;
16 +}
17 +
5 int main(int argc, char *argv[]) 18 int main(int argc, char *argv[])
6 { 19 {
7 if (1) { 20 if (1) {
8 CURL *curl; 21 CURL *curl;
9 CURLcode res; 22 CURLcode res;
23 + std::string read_buffer;
10 24
11 curl = curl_easy_init(); 25 curl = curl_easy_init();
12 if (curl) { 26 if (curl) {
13 curl_easy_setopt(curl, CURLOPT_URL, "http://dblp.uni-trier.de/rec/bib/conf/sbrn/WedemannCD06"); 27 curl_easy_setopt(curl, CURLOPT_URL, "http://dblp.uni-trier.de/rec/bib/conf/sbrn/WedemannCD06");
14 /* example.com is redirected, so we tell libcurl to follow redirection */ 28 /* example.com is redirected, so we tell libcurl to follow redirection */
15 - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 29 +
30 + //write option
31 + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
32 + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &read_buffer);
16 33
17 /* Perform the request, res will get the return code */ 34 /* Perform the request, res will get the return code */
18 res = curl_easy_perform(curl); 35 res = curl_easy_perform(curl);
36 + res = curl_easy_perform(curl);
37 +
38 +
39 + printf("%s\n", read_buffer.c_str());
40 +
19 /* Check for errors */ 41 /* Check for errors */
20 if (res != CURLE_OK) 42 if (res != CURLE_OK)
21 fprintf(stderr, "curl_easy_perform() failed: %s\n", 43 fprintf(stderr, "curl_easy_perform() failed: %s\n",
......