Curl的官方网站 —— http://curl.haxx.se
note:lincurl在C++中使用,回调函数必须是静态函数
1.get方法
首先,写2个函数,一个是请求函数,一个回调函数
void requestServerPrizeListFromServer();
static size_t writtenJsonData(void *ptr, size_t size ,size_t nmemb, void *userData);
public:
static string returnData;
string HelloWorld::returnData = "";
void HelloWorld::requestServerPrizeListFromServer()
{
string serverIP = "www.google.com";
CURL *easyHandle;
easyHandle = curl_easy_init();
if (easyHandle) {
curl_easy_setopt(easyHandle, CURLOPT_URL, serverIP.c_str());
curl_easy_setopt(easyHandle, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(easyHandle, CURLOPT_WRITEFUNCTION, HelloWorld::writtenJsonData);
}
curl_easy_perform(easyHandle);
curl_easy_cleanup(easyHandle);
}
size_t HelloWorld::writtenJsonData(void *ptr, size_t size, size_t nmemb, void *userData)
{
//1.不存本地,缓存存取
/*string temp = (char*)ptr;
returnData += temp;
CCLog("returnData: %s",returnData.c_str());
return size * nmemb ;*/
//2.存本地
CCLog("(char*)ptr: %s",(char*)ptr);
string path = CCFileUtils::sharedFileUtils()->getWritablePath()+"test.txt";
FILE *fp = fopen(path.c_str(), "a+");
int written = fwrite(ptr, size, nmemb, fp);
fclose(fp);
return written;
}
2.post方法
post方法只是比get方法多2条代码,分别是post数据和参数设置。string postData = "name=kevin&passWord=12345";
curl_easy_setopt(easyHandle, CURLOPT_POSTFIELDS, postData.c_str());
3.网络详细参数信息
很多时候我们需要查看网络详细的参数设置,在curl之中,只要添加一行代码,就可以获取控制台打印的详细信息。
curl_easy_setopt(easyHandle1, CURLOPT_VERBOSE, 1L);
//ip地址和端口号
* About to connect() to 192.168.1.5 port 80 (#0)
//开始连接
* Trying 192.168.1.5...
* connected
* Connected to 192.168.1.5 (192.168.1.5) port 80 (#0)
//ip地址后的方法参数
> GET /jforum?module=shoot&action=load HTTP/1.1
//host address
Host: 192.168.1.5
//读取本地的cookie文件
Accept: *
Cookie: jforumUserHash=7b96d4832d66aca47a9e9d11fff1de69; jforumAutoLogin=1; jforumUserId=305; JSESSIONID=09D0FE46A767973E1A1EF89B1D771693.jvm1
//返回状态码200 和ok
< HTTP/1.1 200 OK
* Replaced cookie JSESSIONID="7E0D21DF09402CE07494F8BE33895459.jvm1" for domain 192.168.1.5, path /, expire 0
< Set-Cookie: JSESSIONID=7E0D21DF09402CE07494F8BE33895459.jvm1; Path=/
//utf8编码,文本或者静态网页
< Content-Type: text/html;charset=UTF-8
< Transfer-Encoding: chunked
//时间戳
< Date: Sat, 10 Aug 2013 02:44:43 GMT
//服务器架构
< Server: Apache-Coyote/1.1
<
//打印返回信息
Cocos2d: Network:jsonDataLoad: {"er":0,"zs":0,"fb":2090,"un":"Player_65315","dh":13700,"infoTime":600,"id":305}
0
* Connection #0 to host 192.168.1.5 left intact
//关闭连接
* Closing connection #0