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\r\n");
    strcat(acHeader, "Accept: */*\r\n");
    strcat(acHeader, "Referer: http://");
    strcat(acHeader, HOST_SERVER_IP);
    strcat(acHeader, "/api.php\r\n");
    strcat(acHeader, "Accept-Language: zh-cn\r\n");
    strcat(acHeader, "Content-Type: application/x-www-form-urlencoded\r\n");
    strcat(acHeader, "HOST: ");
    strcat(acHeader, HOST_SERVER_IP);
    strcat(acHeader, "\r\n");
    strcat(acHeader, "Connection: Keep-Alive\r\n");
    strcat(acHeader, "Content-Length: ");
    strcat(acHeader, pcRequestDataLength);
    strcat(acHeader, "\n\n");                     //必须为 \n\n,不能是 \r\n
    strcat(acHeader, acRequestData);
    strcat(acHeader, "\r\n\r\n");

    /*
    * 连接到服务器,发送请求
    */
    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;
}
复制代码

 

posted @   林锅  阅读(396)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示