加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

C语言访问webservice小例子

发布时间:2020-12-16 21:41:48 所属栏目:安全 来源:网络整理
导读:C语言访问webservice小例子 近期做的一个项目中,需要访问webservice获取一些json格式的数据。返回的页面内容只是json格式的数据,并不像实际页面那么复杂。所以不想再引入工具库,直接用socket简单实现了。 以下代码并不是实际项目源码,是我摘取出来整理成

C语言访问webservice小例子

近期做的一个项目中,需要访问webservice获取一些json格式的数据。返回的页面内容只是json格式的数据,并不像实际页面那么复杂。所以不想再引入工具库,直接用socket简单实现了。 以下代码并不是实际项目源码,是我摘取出来整理成的一个小例子分享给大家。代码本身很容易理解,但是需要一些socket编程和http协议基础。 #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <errno.h> #include <time.h> int main() { ? ? int sockfd = 0; ? ? struct sockaddr_in ser_addr; ? ? char url[1024] = {0}; ? ? ? ? ?//请求缓冲区 ? ? char recvbuff[4096] = {0}; ? ? //接收缓冲区 ? ? char *data = NULL; ? ? ? ? ? ? ? ? ? struct timeval time = {5,0}; ? ? int ret = 0; ? ? //填充webservice主机信息 ? ? memset(&ser_addr,sizeof(ser_addr)); ? ? ser_addr.sin_family = AF_INET; ? ? ser_addr.sin_port = htons(80); ? ? ret = inet_pton(AF_INET,"127.0.0.1",&ser_addr.sin_addr.s_addr); ? ? if (ret < 0) ? ? { ? ? ? ? perror("ERROR"); ? ? ? ? return -1; ? ? } ? ? if (ret == 0) ? ? { ? ? ? ? puts("ERROR:arguments error"); ? ? ? ? return -1; ? ? } ? ? //创建socket ? ? sockfd = socket(AF_INET,SOCK_STREAM,0); ? ? if(sockfd < 0) ? ? { ? ? ? ? perror("ERROR"); ? ? ? ? return -1; ? ? } ? ? //设置阻塞时间为5s ? ? ret = setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(const char*)&time,sizeof(time)); ? ? if (ret < 0) ? ? { ? ? ? ? perror("ERROR"); ? ? ? ? goto end; ? ? } ? ? //连接webservice ? ? ret = connect(sockfd,(struct sockaddr *)&ser_addr,sizeof(struct sockaddr)); ? ? if(ret != 0) ? ? { ? ? ? ? perror("ERROR"); ? ? ? ? goto end; ? ? } ? ? //填充请求url 请求头部其他属性自行添加。每行以换行加回车结束 ? ? snprintf(url,sizeof(url),"GET /test HTTP/1.0rnrn"); ? ? //发起http请求 ? ? ret = send(sockfd,url,strlen(url),0); ? ? if (ret < 0) ? ? { ? ? ? ? perror("ERROR"); ? ? ? ? goto end; ? ? } ? ? puts("send success"); ? ? //页面返回 ? ? ret = recv(sockfd,recvbuff,sizeof(recvbuff),0); ? ? if (ret < 0) ? ? { ? ? ? ? perror("ERROR"); ? ? ? ? goto end; ? ? } ? ? puts("recv success"); ? ? //解析返回页面,将data指针指向数据主体 ? ? data = strstr(recvbuff,"rnrn"); ? ? data += 4; ? ? //打印页面 ? ? if (data != NULL) ? ? { ? ? ? ? puts(data); ? ? } end: ? ? close(sockfd); ? ? return 0; } 原文地址:https://segmentfault.com/a/1190000003007142

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读