C语言访问webservice小例子

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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.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;
}

脚本宝典总结

以上是脚本宝典为你收集整理的C语言访问webservice小例子全部内容,希望文章能够帮你解决C语言访问webservice小例子所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。