1 Star 0 Fork 3

Endorphins/智能语言学习

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
http.c 2.58 KB
一键复制 编辑 原始数据 按行查看 历史
Endorphins 提交于 2024-07-03 17:33 . 增加语言识别示例代码
#include <stdio.h>
#include "http.h"
// 发送GET请求
// url: 请求地址
// headers: 增加的请求头部字段
// psize: 响应正文大小,输出参数
// 返回值: 响应正文,需要调用者释放内存
char *get(char *url, struct curl_slist *headers, size_t *psize)
{
char *respdata;
size_t respsize;
FILE *fp = open_memstream(&respdata, &respsize);
if (!fp)
{
perror("open_memstream");
return NULL;
}
CURL *client = curl_easy_init();
if (!client)
{
perror("curl_easy_init");
fclose(fp);
return NULL;
}
curl_easy_setopt(client, CURLOPT_URL, url);
if (headers)
{
curl_easy_setopt(client, CURLOPT_HTTPHEADER, headers);
}
// 将服务器返回的响应报文保存到文件流中
curl_easy_setopt(client, CURLOPT_WRITEDATA, fp);
CURLcode error = curl_easy_perform(client);
if (error != CURLE_OK)
{
fprintf(stderr, "curl_easy_perform: %s\n", curl_easy_strerror(error));
curl_easy_cleanup(client);
fclose(fp);
return NULL;
}
curl_easy_cleanup(client);
fclose(fp);
// 更新响应正文大小
*psize = respsize;
return respdata;
}
// 发送POST请求
// url: 请求地址
// headers: 增加的请求头部字段
// data: 请求正文
// psize: 请求和响应正文大小,输入和输出参数
// 返回值: 响应正文,需要调用者释放内存
char *post(char *url, struct curl_slist *headers, char *data, size_t *psize)
{
char *respdata;
size_t respsize;
FILE *fp = open_memstream(&respdata, &respsize);
if (!fp)
{
perror("open_memstream");
return NULL;
}
CURL *client = curl_easy_init();
if (!client)
{
perror("curl_easy_init");
fclose(fp);
return NULL;
}
curl_easy_setopt(client, CURLOPT_URL, url);
curl_easy_setopt(client, CURLOPT_POST, 1);
curl_easy_setopt(client, CURLOPT_POSTFIELDS, data);
curl_easy_setopt(client, CURLOPT_POSTFIELDSIZE, *psize);
if (headers)
{
curl_easy_setopt(client, CURLOPT_HTTPHEADER, headers);
}
// 将服务器返回的响应报文保存到文件流中
curl_easy_setopt(client, CURLOPT_WRITEDATA, fp);
CURLcode error = curl_easy_perform(client);
if (error != CURLE_OK)
{
fprintf(stderr, "curl_easy_perform: %s\n", curl_easy_strerror(error));
curl_easy_cleanup(client);
fclose(fp);
return NULL;
}
curl_easy_cleanup(client);
fclose(fp);
// 更新响应正文大小
*psize = respsize;
return respdata;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/Endorphins1/intelligent-language-learning.git
git@gitee.com:Endorphins1/intelligent-language-learning.git
Endorphins1
intelligent-language-learning
智能语言学习
master

搜索帮助