C 语言Socket 实现http 带参数的POST请求

    本文叙述C语言中结合socket 如何实现http POST请求,对于http协议相关内容可以查看HTTP协议详解。对于不带参数的post请求,只需要按照http格式发送即可。下面以带参数的POST请求为例。

1. C 语言Socket 实现带参数的 http post请求

     C语言中可以使用snprintf 、strcat 等函数将字符串数据(http头和参数数据)按照http协议格式保存在buf中,再调用socket send函数发送buf的内容。

     现有API接口: http://ABC.com:1234/rest/Prd/S_Prd_Devices/
              POST请求, 参数:String macAddr, mac地址(长度为12);String pass,客户端验证字符串(长度为16);
       返回:{“success”:true}

                具体实现:

         //str_mac、str_pass分别为参数字符串

        // total_len  为参数数据的长度,参数数据发送时格式为mac=参数1&pass=参数2

        int total_len = strlen(str_pass) +strlen(str_mac)+strlen("mac=")+strlen("&pass=");

        int len;

         unsigned char buf[256];
        memset(buf, 0, 256);

        snprintf(buf,sizeof(buf)-1,
        "POST /rest/Prd/S_Prd_Devices/ HTTP/1.1\n"
        "Host: ABC.com:1234\n"
        "Content-Type: application/x-www-form-urlencoded\n"
        "Content-Length: %d\r\n"
        "\r\n"
        "mac=%s&pass=%s",
        total_len,
        str_mac,
        str_pass
        );

       len = strlen(buf);
      printf("\nsendata:%s\n",buf);
       sock_writen(fd, buf, len);
       
说明:发送的参数数据(即total_len)长度必须为准确的参数长度,否则服务器不知道接受多少数据


2  格式说明

结合上述的post 实例,简单说明http 格式:

POST - 请求方法,向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。注意,GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。

HTTP/1.1 :协议支持版本为1.1。

Host:请求域名。

Content-Type:用来表明request的表明类型。

Content-Length:表示请求消息正文的长度。例如:Content-Length: 38。对于带参数的post请求,该值为参数的长度。

3.状态码

有5种可能的值,如下表所示。

状态码

定义

说明

1XX

信息

接收到请求,继续处理

2XX

成功

操作成功地收到,理解和接受

3XX

重定向

为了完成请求,必须采取进一步措施

4XX

客户端错误

请求的语法有错误或不能完全被满足。

5XX

服务器端错误

服务器无法完成明显有效的请求。


你可能感兴趣的:(C 语言Socket 实现http 带参数的POST请求)