(4) curl_easy_cleanup //清理
#include "curl/curl.h"
struct MemoryStruct
{
char * memory;//内容
size_t size; //长度
};
//接收到数据之后会调用该函数。
//参数含义: 1、接收到的内容。第2个参数 和 第3个参数 相乘会得到接收到的内容有多少字节。
//void *万能指针
static size_t WritrMemoryCallback(void *contents,size_t size,size_t nmemb,void *userp)
{
size_t realsize = size * nmemb;
struct MemoryStruct*mem=(struct MemoryStruct*)userp;//相同
//内容 堆上申请空间 空间的大小
mem->memory=(char*)realloc(mem->memory, mem->size + realsize + 1);
if (mem->memory == NULL)
{
printf("not enough memory (realloc returned NULL)\n");
return 0;
}
// 到 (数组) 从源 拷贝的个数
memcpy(&(mem->memory[mem->size]),contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
return realsize;
}
//注册
/* struct MemoryStruct chunk;
chunk.memory=(char*)malloc(1);
chunk.size=0;
//url是利用URL语法在命令行方式下工作的开源文件传输工具
CURL*curl=curl_easy_init();
if (curl)
{
第 1 个参数 curl 是由 curl_easy_init() 返回的句柄
第 2 个参数是可以设置的选项(CURLoption);
第 3 个参数是与第 2 个选项相关联的参数
curl_easy_setopt(curl,CURLOPT_URL,"http://123.56.50.222:8050/[email protected]&password=123456&phoneIdentity=896498109");
CURLOPT_WRITEDATA
使用该选项时,第 3 个参数作为用户数据的指针而传递到使用 CURLOPT_WRITEFUNCTION 选项时指定的回调函数中(第 4 个参数)。
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&chunk);
CURLOPT_WRITEFUNCTION
在启动会话时,一旦检测到有需要接收的数据时,回调函数被调用。
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,WritrMemoryCallback);
CURLcode res = curl_easy_perform(curl);//请求成功返回0
curl_easy_cleanup(curl);
if (!res)
{ //成功打印
log("%s\n",chunk.memory);
}else
{
log("error!\n");
log("%d",res);
}
}
//解析
Document doc;//解析工具
doc.Parse
if (doc.HasParseError())
{
log("json error\n");
// return;
}
rapidjson::Value&_gameCharpter=doc["rstcode"];
if (strcmp("401", _gameCharpter.GetString())==0)
{
MemoryStruct()
cout<<"rstcode"<
}
//登录
struct MemoryStruct chunk;
chunk.memory=(char*)malloc(1);
chunk.size=0;
//url是利用URL语法在命令行方式下工作的开源文件传输工具
CURL*curl=curl_easy_init();//创建curl
if (curl)
{
curl_easy_setopt(curl,CURLOPT_URL,"http://123.56.50.222:8050/userLogin");
const char * postData = "{email:[email protected],password:123456,phoneIdentity:896498109}";
*CURLOPT_POSTFIELDS: 传递一个作为HTTP “POST”操作的所有数据的字符串。
curl_easy_setopt(curl,CURLOPT_POSTFIELDS,postData);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,(void*)&chunk);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,WritrMemoryCallback);
CURLcode res = curl_easy_perform(curl);//请求访问
curl_easy_cleanup(curl);
if (!res)
{
log("%s\n",chunk.memory);
}else
{
log("error!\n");
log("%d",res);
}
}
Document doc;//解析工具
doc.Parse
if (doc.HasParseError())
{
log("json error\n");
// return;
}
//如果存在
rapidjson::Value&_gameCharpter=doc["rstcode"];
if (strcmp("202",_gameCharpter.GetString())==0)
{
cout<<"正确"<
}
界面登录拷贝
curl_easy_setopt(curl,CURLOPT_URL,"http://123.56.50.222:8050/userLogin");
char str[300];
sprintf(str, "{email:%s,password:%s,phoneIdentity:%s}",TextField1->getString().c_str(),TextField2->getString().c_str(),TextField3->getString().c_str());
const char * postData = str;
curl_easy_setopt(curl,CURLOPT_POSTFIELDS,postData);