1 // curl_test.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5
6 #include <iostream>
7 #include <libcurl/include/curl/curl.h>
8 #pragma comment(lib, "d:/libs/libcurl/libcurl.lib")
9
10 using namespace std;
11
12 /**
13 * 一旦curl接收到数据,就会调用此回调函数
14 * buffer:数据缓冲区指针
15 * size:调试阶段总是发现为1
16 * nmemb:(memory block)代表此次接受的内存块的长度
17 * userp:用户自定义的一个参数
18 */
19 size_t write_data(void* buffer, size_t size, size_t nmemb, void* userp)
20 {
21 static int current_index = 0;
22
23 cout << "current:" << current_index++;
24 cout << (char*)buffer;
25 cout << "---------------" << endl;
26
27 int temp = *(int*)userp; // 这里获取用户自定义参数
28 return nmemb;
29 }
30
31 int _tmain(int argc, _TCHAR* argv[])
32 {
33 curl_global_init(CURL_GLOBAL_ALL); // 首先全局初始化CURL
34 CURL* curl = curl_easy_init(); // 初始化CURL句柄
35
36 if (NULL == curl)
37 {
38 return 0;
39 }
40
41 int my_param = 1; // 自定义一个用户参数
42
43 // 设置目标URL
44 curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");
45 // 设置接收到HTTP服务器的数据时调用的回调函数
46 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
47 // 设置自定义参数(回调函数的第四个参数)
48 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &my_param);
49 // 执行一次URL请求
50 CURLcode res = curl_easy_perform(curl);
51 // 清理干净
52 curl_easy_cleanup(curl);
53
54 return 0;
55 }