Windows下,纯C的HttpGet协议

来源:互联网 发布:网红用的拍照软件 编辑:程序博客网 时间:2024/06/06 01:23

       本来是打算写一个Httppost,向服务器端发送数据,竟然左右不成功。好在要发送的数据不多,就转向HttpGet协议了。

        以下是代码:

#include <stdio.h>
#include "winsock2.h"

#pragma comment(lib, "ws2_32.lib")

int main()
{
 SOCKET      sSocket      = INVALID_SOCKET;
 SOCKADDR_IN stSvrAddrIn  = {0}; /* 服务器端地址 */
 char        sndBuf[350] = {0}; /* 发送数据缓冲区 */
 int         nRet         = SOCKET_ERROR;

 WSADATA     wsaData;

 /* HTTP 消息构造开始,这是程序的关键之处 */

 /*
   * Get方法 + 空格 +  地址 + 要传递的数据 + 空格 + HTTP/1.1 + 回车
      * 要传递的数据包括:(数据之间用“&”连接)
     tb_bus_license_tag        :车辆ID,         例如:tb_bus_license_tag=123456
        tb_bus_station            :车站ID,         例如:tb_bus_station=32
        tb_bus_pull_in_time       :车辆到站的时间点(日期),例如:tb_bus_pull_in_time=2009-06-19 (格式:XXXX-XX-XX)
  tb_bus_pull_in_time_hour  :车辆到站的时间点(小时),例如:tb_bus_pull_in_time_hour=11    (有效的时间数据,24小时制)
        tb_bus_pull_in_time_minite:车辆到站的时间点(分钟),例如:tb_bus_pull_in_time_minite=25  (有效的时间数据即可)
        tb_people_count           :到站时上车的人数        ,例如:tb_people_count=15
        tb_down_people_count      :到站时下车的人数        ,tb_down_people_count=4
   *HTTP协议选择1.1版本
    */


 sprintf(sndBuf, "GET /TempTest/Default.aspx?tb_bus_license_tag=123456&tb_bus_station=32&tb_bus_pull_in_time=2009-06-19&tb_bus_pull_in_time_hour=11&tb_bus_pull_in_time_minite=25&tb_people_count=15&tb_down_people_count=4 HTTP/1.1/n");
 
 //接收消息类型:全部
 strcat(sndBuf,"Accept: */*/r/n");

 //用户代理:Mozilla
 strcat(sndBuf,"User-Agent: Mozilla/r/n");

 //主机名:192.168.1.250
 strcat(sndBuf, "Host:192.168.1.250/r/n");

    //Connection:Keep-Alive,长连接应用,在HTTP协议中加入这一条可维持长连接
 strcat(sndBuf,"Connection:Keep-Alive/r/n");

    //Cache-Control:no-cache,表示请求消息不能缓存。注意后面多加一个/r/n,即空行,表示消息结束
 strcat(sndBuf,"Cache-Control:no-cache/r/n/r/n");

 /* HTTP 消息构造结束 */

 /* socket 初始化,版本为winsock 2.2 */
 WSAStartup(MAKEWORD(2, 2), &wsaData);

 stSvrAddrIn.sin_family      = AF_INET;
 stSvrAddrIn.sin_port        = htons(80);
 stSvrAddrIn.sin_addr.s_addr = inet_addr("192.168.1.250");

 /*建立socket*/
 sSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

 /* 连接 */
 nRet = connect(sSocket, (SOCKADDR*)&stSvrAddrIn, sizeof(SOCKADDR));
 if (SOCKET_ERROR == nRet)
 {
  printf("connect fail!/n");
  return -1;
 }

 /* 发送HTTP请求消息 */
 nRet = send(sSocket, (char*)sndBuf, sizeof(sndBuf), 0);
    if (SOCKET_ERROR == nRet)
    {
  printf("send data fail!/n");
  return -1;
    }

 /*此处可添加接收消息函数*/


 return 0;
}