目录
- 题目
- 分析
- 代码
- 结果
题目
利用聚合API平台的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端
分析
1.需从源代码网站GitHub或SourceForge代码网站下载cJSON库及阅读下载的README相关手册如何使用cJSON库;
2.使用聚合API平台的笑话大全的API,URL需使用自己的接口密钥;
3.服务器响应回来的包体,需使用strstr()函数查找子串,找到JSON格式的字符串。
代码
/***********************************************************************************
*
* file name: demo.c
* author : cnzycwp@126.com
* date : 2024/06/11
* function : 该案例是利用聚合API平台的API接口,利用HTTP协议向服务器发送请求,并接受
* 服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端
* note : 该函数使用了cJSON库,需要先下载cJSON库,并将其包含到工程中
* 编译时需要添加cJSON.c文件,即gcc demo.c cJSON.c -o demo
* version :
*
* CopyRight (c) 2023-2024 cnzycwp@126.com All Right Reseverd
*
* **********************************************************************************/
/************************************头文件*****************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "cJSON.h"
/***********************************************************************************/
/************************************宏定义*****************************************/
#define PORT 80
#define IPADDR "203.107.54.210"
#define APPKEY "xxx" //聚合API平台的API接口密钥
/***********************************************************************************/
int main(int argc, char const *argv[])
{
//1.创建TCP套接字
int tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
if (tcp_socket == -1)
{
fprintf(stderr, "tcp socket error,errno:%d,%sn",errno,strerror(errno));
exit(1);
}
//2.发起连接请求,等待接受服务器接受连接
struct sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET; //协议族,是固定的
dest_addr.sin_port = htons(PORT); //服务器端口,必须转换为网络字节序
dest_addr.sin_addr.s_addr = inet_addr(IPADDR); //服务器地址
int ret = connect(tcp_socket,(struct sockaddr *)&dest_addr,sizeof(dest_addr));
if (ret valuestring);
//9.关闭套接字
close(tcp_socket);
return 0;
}