微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

发送http请求的C++代码实现

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

    #include <arpa/inet.h>  
    #include <assert.h>  
    #include <errno.h>  
    #include <netinet/in.h>  
    #include <signal.h>  
    #include <stdlib.h>  
    #include <stdio.h>  
    #include <string.h>  
    #include <sys/types.h>  
    #include <sys/socket.h>  
    #include <sys/wait.h>  
    #include <netdb.h>  
    #include <unistd.h>  
      
    #define SA      struct sockaddr  
    #define MAXLINE 4096  
    #define MAXSUB  2000  
    #define MAXParaM 2048  
      
    #define LISTENQ         1024  
      
    extern int h_errno;  
      
    int sockfd;  
    char *hname = "yunpian.com";  
    char *send_sms_json = "/v1/sms/send.json";  
    char *get_user_json = "/v1/user/get.json";  
      
    /** 
     * 发http post请求 
     */  
    ssize_t http_post(char *page,char *poststr)  
    {  
        char sendline[MAXLINE + 1],recvline[MAXLINE + 1];  
        ssize_t n;  
        snprintf(sendline,MAXSUB,"POST %s HTTP/1.0\r\n"  
                 "Host: %s\r\n"  
                 "Content-type: application/x-www-form-urlencoded\r\n"  
                 "Content-length: %zu\r\n\r\n"  
                 "%s",page,hname,strlen(poststr),poststr);  
          
        write(sockfd,sendline,strlen(sendline));  
        while ((n = read(sockfd,recvline,MAXLINE)) > 0) {  
            recvline[n] = '\0';  
            printf("%s",recvline);  
        }  
        return n;  
    }  
      
    /** 
     * 查账户信息 
     */  
    ssize_t get_user(char *apikey)  
    {  
        char params[MAXParaM + 1];  
        char *cp = params;  
        sprintf(cp,"apikey=%s",apikey);  
        return http_post(get_user_json,cp);  
    }  
      
    /** 
     * 使用通用接口发短信 
     */  
    ssize_t send_sms(char *apikey,char *mobile,char *text)  
    {  
        char params[MAXParaM + 1];  
        char *cp = params;  
        sprintf(cp,"apikey=%s&mobile=%s&text=%s",apikey,mobile,text);  
        return http_post(send_sms_json,cp);  
    }  
      
    int main(void)  
    {  
        struct sockaddr_in servaddr;  
        char **pptr;  
        char str[50];  
        struct hostent *hptr;  
        if ((hptr = gethostbyname(hname)) == NULL) {  
            fprintf(stderr,"通过域名获取IP失败: %s: %s",hstrerror(h_errno));  
            exit(1);  
        }  
        printf("域名: %s\n",hptr->h_name);  
        if (hptr->h_addrtype == AF_INET  
            && (pptr = hptr->h_addr_list) != NULL) {  
            printf("IP: %s\n",inet_ntop(hptr->h_addrtype,*pptr,str,sizeof(str)));  
        } else {  
            fprintf(stderr,"Error call inet_ntop \n");  
            exit(1);  
        }  
          
        //建立socket连接  
        sockfd = socket(AF_INET,SOCK_STREAM,0);  
        bzero(&servaddr,sizeof(servaddr));  
        servaddr.sin_family = AF_INET;  
        servaddr.sin_port = htons(80);  
        inet_pton(AF_INET,&servaddr.sin_addr);  
          
        connect(sockfd,(SA *) & servaddr,sizeof(servaddr));  
      
        //修改为您的apikey  
        char *apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";  
        //修改为您要发送的手机号  
        char *mobile = "188xxxxxxxx";  
        //设置您要发送的内容  
        char *text = "您的验证码是1234";  
          
        /**************** 查账户信息调用示例 *****************/  
        get_user(apikey);  
          
        /**************** 使用通用接口发短信 *****************/  
        //send_sms(apikey,text);  
      
        close(sockfd);  
        exit(0);  
    }             

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐