C语言访问webservice小例子

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, 0, 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.0\r\n\r\n");     //发起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,"\r\n\r\n");     data += 4;     //打印页面     if (data != NULL)     {         puts(data);     } end:     close(sockfd);     return 0; } 原文地址:https://segmentfault.com/a/1190000003007142
相关文章
相关标签/搜索