C socket post数据到url

#define HOST_SERVER_IP "192.168.1.15"
#define HOST_PORT      80

int gsh_post_clients(const char* sn, const char* ip)
{
    if (NULL == sn || NULL == ip)
    {
        return -1;
    }

    int iSocketId                = -1;
    int iDataLength            = 0;
    int iConnectId               = 1;
    char acHeader[BUFSIZ]        = "";
    char acRequestData[BUFSIZ] = "";
    char *pcRequestDataLength  = "";
    struct sockaddr_in stSocketAddr;
    char text[BUFSIZ];

    /*
    * 设定socket参数
    */
    iSocketId = socket(AF_INET, SOCK_STREAM, 0);

    if (-1 == iSocketId)
    {
        printf("socket is wrong!");
        return -1;
    }

    stSocketAddr.sin_family = AF_INET;
    stSocketAddr.sin_port     = htons(HOST_PORT);
    inet_aton(HOST_SERVER_IP, &stSocketAddr.sin_addr);

    /*
    * 组织发送到web服务器的信息
    */
    strcat(acRequestData, "sn=");
    strcat(acRequestData, sn);
    strcat(acRequestData, "&");
    strcat(acRequestData, "ip=");
    strcat(acRequestData, ip);

    pcRequestDataLength = (char *)malloc(128);
    iDataLength = strlen(acRequestData);
    sprintf(pcRequestDataLength, "%d", iDataLength);

    strcat(acHeader, "POST ");
    strcat(acHeader, "/api.php");
    strcat(acHeader, " HTTP/1.1
");
    strcat(acHeader, "Accept: */*
");
    strcat(acHeader, "Referer: http://");
    strcat(acHeader, HOST_SERVER_IP);
    strcat(acHeader, "/api.php
");
    strcat(acHeader, "Accept-Language: zh-cn
");
    strcat(acHeader, "Content-Type: application/x-www-form-urlencoded
");
    strcat(acHeader, "HOST: ");
    strcat(acHeader, HOST_SERVER_IP);
    strcat(acHeader, "
");
    strcat(acHeader, "Connection: Keep-Alive
");
    strcat(acHeader, "Content-Length: ");
    strcat(acHeader, pcRequestDataLength);
    strcat(acHeader, "

");                     //必须为 

,不能是 

    strcat(acHeader, acRequestData);
    strcat(acHeader, "

");

    /*
    * 连接到服务器,发送请求
    */
    iConnectId = connect(iSocketId,(struct sockaddr *)&stSocketAddr, sizeof(struct sockaddr_in));

    if (0 != iConnectId)
    {
        printf("connect is fail!");
        return -1;
    }

    if (strlen(acHeader) != send(iSocketId, acHeader, strlen(acHeader), 0))
    {
        printf("send data is fail!");
        return -1;
    }

    while(recv(iSocketId, text, BUFSIZ, 0) > 0)
    {
        printf("%s", text);
    }

    close(iSocketId);
    return 0;
}
原文地址:https://www.cnblogs.com/linguoguo/p/4428511.html