首页 > 其他分享 >利用聚合API平台的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端

利用聚合API平台的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端

时间:2024-06-11 21:33:09浏览次数:18  
标签:addr 响应 cJSON 利用 API 服务器 include

目录

题目


利用聚合API平台的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端

分析


1.需从源代码网站GitHub或SourceForge代码网站下载cJSON库及阅读下载的README相关手册如何使用cJSON库;

2.使用聚合API平台的笑话大全的API,URL需使用自己的接口密钥;

3.服务器响应回来的包体,需使用strstr()函数查找子串,找到JSON格式的字符串。

代码


/***********************************************************************************
*
*	file name:	demo.c
*	author	 :  [email protected] 
*	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   [email protected]   All Right Reseverd 
*
* **********************************************************************************/
/************************************头文件*****************************************/
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/udp.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#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,%s\n",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 < 0)
	{
		fprintf(stderr, "connect error,errno:%d,%s\n",errno,strerror(errno));
		exit(1);
	}


	//3.用于存储HTTP的请求内容: 请求行 + 请求字段 + \r\n + 请求包体(可选)  
	char reqbuf[1024] = {0};

	sprintf(reqbuf,"GET http://v.juhe.cn/joke/content/list.php?key=%s&sort=desc&page=1&pagesize=1&time=1418816972 "
				   "HTTP/1.1"
				   "\r\n"
				   "Host:v.juhe.cn\r\n"
                   "Content-Type:application/x-www-form-urlencoded\r\n"
				   "\r\n"
		    ,APPKEY);


	//4.说明双方建立连接,此时可以利用HTTP协议发送请求信息,并等待服务器的响应  基于请求/响应
	send(tcp_socket,reqbuf,strlen(reqbuf),0);

	//5.等待服务器的响应
	char recvbuf[1024] = {0};
	
	recv(tcp_socket,recvbuf,sizeof(recvbuf),0);  //第一次返回的响应参数

    //6.查找子串
    char *recv_body = strstr(recvbuf,"{");
	
	//7.对响应包体进行JSON解析
	
	//1) 先把获取的字符串转换为JSON格式
	cJSON * obj = cJSON_Parse(recv_body);

	//2) 把解析之后的JSON格式进行输出,用于调试
	// printf("%s\n",cJSON_Print(obj));

	//3) 对JSON格式进行解析
    cJSON * result = NULL;
	result = cJSON_GetObjectItem(obj, "result");

    cJSON * data = NULL;
	data = cJSON_GetObjectItem(result, "data");

    cJSON * obj1 = NULL;
    obj1 = cJSON_GetArrayItem(data, 0);

    cJSON * content = NULL;
    content = cJSON_GetObjectItem(obj1, "content");

    //8.显示笑话内容
    printf("content : %s\n",content->valuestring);

	//9.关闭套接字
    close(tcp_socket);

	return 0;
}

结果


image

标签:addr,响应,cJSON,利用,API,服务器,include
From: https://www.cnblogs.com/cwp-home/p/18242760

相关文章

  • 用Tensorflow API:tf.keras搭建网络八股:六步法
    #想要搭建属于自己的神经网络模型么,跟我做六步就好#入门课程可看Tensorflow2.0#激活函数教程#课程很好如有不懂可私信交流总览六步法的简要内容import      第一步引入相关模块train,test    第二步说明训练集(特征)和测试集(标签)是什么model=tf.k......
  • 网络编程练习题---利用cJSON库对服务器返回的JSON格式数据完成解析
    目录题目注意事项实现代码结果展示相关接口指引题目利用某些平台(聚合API、百度AI、科大讯飞API)的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端。注意事项1.预测的日期开始时间为2010-01-012."老黄历"API......
  • MFC案例:利用SetTimer函数编写一个“计时器”程序
    一、希望达成效果    利用基于对话框的MFC项目,做一个一方面能够显示当前时间;另一方面在点击开始按钮时进行读秒计时,计时结果动态显示,当点击结束时读秒结束并保持最后结果。二、编程步骤及相关代码、注释   1、启动VS->创建新项目->MFC应用-项目名称:MFCtimer->......
  • 基于centos7.9搭建http文件服务器
    基于centos7.9搭建http文件服务器1.安装httpd[root@localhost~]#yuminstall-yhttpd2.关闭防火墙以及selinux[root@localhost~]#systemctlstopfirewalld&&setenforce03.修改相关配置​ 文件/etc/httpd/conf/httpd.conf中的默认参数(自定义修改)[root@loca......
  • 【实际-有功-无功控制器的动态性能】【两级电压源变流器VSC】【采用电流控制的实际/无
     ......
  • 如何利用 Google 搜索结果页来引导?
    在数据驱动的决策世界中,获取准确而全面的信息至关重要。Google搜索结果抓取是一种强大的技术,可以让企业、调查人员和研究人员从搜索引擎结果中提取可靠的数据。本综合指南将深入研究Google搜索结果的最佳实践、工具和道德考量,以确定能够有效利用这一技术。了解Google搜索......
  • wimlib API 提供了一系列用于处理 Windows 映像文件(.wim 文件)的函数和数据结构,使开发
    wimlibAPI提供了一系列用于处理Windows映像文件(.wim文件)的函数和数据结构,使开发人员能够在其应用程序中集成对WIM文件的创建、修改和提取功能。以下是一些常见的wimlibAPI:WIM文件的创建和初始化:wimlib_create_new_wim():创建一个新的WIM文件。wimlib_open_wim():......
  • 将 office 的注册应用 applications 的 API 密钥设置更长的期限
    首先官方文档https://learn.microsoft.com/zh-cn/graph/api/application-addpassword?view=graph-rest-1.0&tabs=http 操作如下,必须用管理员账户登录操作 1:进入https://developer.microsoft.com/zh-cn/graph/graph-explorer,并在请求输入url处右上方确保登录2:登陆url......
  • AWS无服务器 应用程序开发—第一章 目录
    越来越多的用户正在考虑采用无服务器架构进行云原生应用程序开发。通过引入无服务器架构,您将摆脱以前需要的服务器、操作系统和中间件的管理,并且能够显着降低成本。基于我们在应用程序开发和AWS构建方面的丰富知识,提供广泛的服务,开始介绍架构选择、设计、开发和维护。作......
  • 利用自定义标签,实现select下拉列表默认选中
    //创建块函数方法,用于替换文本中的值functionsmarty_block_get_cates($params,$content,&$_sm,&$repeat){if(!$repeat){$ci=&get_instance();$cates=$ci->db->get('category')->result_array();$cates=get_dat......