libcurl使用1:用get请求方式+图灵机器人接口实现智能聊天系统

本文介绍如何使用libcurl库实现HTTP GET请求。从初始化到请求执行及数据处理全流程解析,并附带示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

libcurl 下载地址: http://curl.haxx.se/download.html

libcurl api 参考文档: http://curl.haxx.se/libcurl/c/



先介绍一下大体流程, 然后再用代码示例进行具体使用的演示

libcurl初始化工作:

CURLcode curl_global_init(long flags ); 

flags的值一般设置为CURL_GLOBAL_DEFAULT

注意这个函数不是线程安全的, 意味着如果你在编写一个多线程程序, 你需要在创建你的多线程之前调用它


CURL *curl_easy_init( );

libcurl的初始化函数, 我们通过这个函数获取libcurl的句柄


CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);

设置url的一些参数, 例如url的地址, post get请求方式等


CURLcode curl_easy_perform(CURL * easy_handle );

执行前面设置的这次请求


void curl_easy_cleanup(CURL * handle );

curl_global_cleanup();

清理工作, 最后调用


示例代码:


初始化libcurl

CURL* curl_test_init()
{
	CURLcode cd = curl_global_init(CURL_GLOBAL_DEFAULT);
	if(cd != CURLE_OK)
		return 0;

	return curl_easy_init();
}

设置http get请求:

CURLcode curl_test_get(CURL* curl, NET_OPT& nopt)
{
	
	CURLcode cd = curl_easy_setopt(curl, CURLOPT_URL, nopt.strUrl.c_str());
	if(cd != CURLE_OK)
		return cd;

	cd = curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
	if(cd != CURLE_OK)
		return cd;

	cd = curl_easy_setopt(curl, CURLOPT_WRITEDATA, &nopt.text);
	if(cd != CURLE_OK)
		return cd;

	cd = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_get_callback);
	if(cd != CURLE_OK)
		return cd;

	return CURLE_OK;
}

CURLcode cd = curl_easy_setopt(curl, CURLOPT_URL, nopt.strUrl.c_str()):这段代码是设置http 的url, 参数之间使用&分隔

cd = curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L):这段设置是告诉我们用的是get请求方式


cd = curl_easy_setopt(curl, CURLOPT_WRITEDATA, &nopt.text),

cd = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_get_callback):处理请求接受到的数据, nopt.text是一个std::string类型的变量, 用于接收返回的文本,write_get_callback是一个处理接收数据的回调函数.

这俩个函数的原型分别为:

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer);

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEFUNCTION, write_callback);

回调函数写法:size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);

我的回调函数示例代码:


size_t write_get_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
{
	string str;
	str.append(ptr, size*nmemb);
	string strGBK = UTF8ToGBK(str);
	string* p = (string*)userdata;
	Json::Value root;
	Json::Reader reader;
	if(reader.parse(strGBK.c_str(), root))
	{
		*p = root["text"].asString();
	}
	return size*nmemb;
}

把接收到的utf8字符串转成gbk格式, 然后把读取到的文本信息存储到nopt.text中, nopt.text会作为userdata参数传递给回调函数。


执行请求:

CURLcode curl_test_perform(CURL* curl)
{
	return curl_easy_perform(curl);
}

清理:

void curl_test_clean(CURL* curl)
{
	if(curl)
	{
		curl_easy_cleanup(curl);
		curl_global_cleanup();
	}
}

这个示例是使用图铃机器人接口所做的一个智能聊天程序, 完整的示例代码地址:

http://download.csdn.net/detail/shuaixingrumo/9415317


你需要替换自己在图灵机器人官网申请的key和自己的id才能正常编译使用这个程序。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值