忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 540 | 回复: 1

[C] 求助,HTML POST 用C语言实现。 [复制链接]

论坛徽章:
0
发表于 2017-08-23 16:41 |显示全部楼层
          我现在在测试一个服务器的POST文件,就是上传一个图片,我写的HTML 测试是可以上传成功的。
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.         <title>this is post test</title>
  5.         <meta charset="utf-8">
  6. </head>
  7. <body>
  8.         <form method="post" action=" http://testing-only.covert-wireless.com/v0/photos" enctype="multipart/form-data">
  9.                 <input type="text" name="cameraCode" value="014286000210947">
  10.                 <input type="text" name="latitude"        value="38.1234312">
  11.                 <input type="text" name="longitude"        value="54.4123412">
  12.                 <input type="text" name="temperature"        value="52.2">
  13.                 <input type="text" name="date"        value="08/23/2017 ">
  14.                 <input type="text" name="time"        value="20:22:01">
  15.                 <input type="text" name="signal"        value="4">
  16.                 <input type="text" name="battery"        value="2">
  17.                 <input type="text" name="capacity"        value="3788">
  18.                 <input type="text" name="freeSpace"        value="2344">
  19.                 <input type="text" name="fileId"        value="650001">
  20.                 <input type="text" name="firmware"        value="V4.0.0.1">
  21.                 <input type="file" name="file"/>
  22.                 <input type="submit">
  23.         </form>
  24. </body>
  25. </html>
复制代码
下面是我用C语言写的,但是一直调不通,求大神指教:
  1. #include <stdio.h>
  2. #include <sys/types.h>                        /* See NOTES */
  3. #include <sys/socket.h>
  4. #include <arpa/inet.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7. #include <netinet/in.h>
  8. #include <pthread.h>
  9. #include <string.h>
  10. #include <sys/stat.h>



  11. int fd;

  12. unsigned long get_file_size(const char *path)   
  13. {   
  14.     unsigned long filesize = -1;        
  15.     struct stat statbuff;   
  16.     if(stat(path, &statbuff) < 0){   
  17.         return filesize;   
  18.     }else{   
  19.         filesize = statbuff.st_size;   
  20.     }   
  21.     return filesize;   
  22. }   


  23. void httpPost(void)
  24. {
  25.         int ret = 0;
  26.         FILE* fp = NULL;
  27.         char *pHeader = "POST /v0/photos HTTP/1.1\r\n"
  28.                                         "Host: testing-only.covert-wireless.com\r\n"
  29.                                         "Content-Type: application/x-www-form-urlencoded\r\n"
  30.                                         "Content-Length:";

  31.         char *pBodyInfo = "cameraCode:014286000210947\r\n"
  32.                                         "latitude:38.1234312\r\n"
  33.                                         "longitude:54.4123412\r\n"
  34.                                         "temperature:52.2\r\n"
  35.                                         "date:06/12/2017\r\n"
  36.                                         "time:20:22:01\r\n"
  37.                                         "signal:4\r\n"
  38.                                         "battery:2\r\n"
  39.                                         "capacity:3788\r\n"
  40.                                         "freeSpace:2344\r\n"
  41.                                         "fileId:650001\r\n"
  42.                                         "firmware:V4.0.0.1\r\n"
  43.                                         "file:";

  44.         char* tail = "\r\n\r\n";

  45.         char pHeaderStr[4096] = {0};

  46.         int filesize = get_file_size("./t.jpg");

  47.         printf("filesize = %d\n", filesize);

  48.         int contentLen = strlen(pBodyInfo) + filesize ;//+ strlen(tail);

  49.         char pLenstr[32] = {0};
  50.         sprintf(pLenstr, "%d", contentLen);
  51.         strcat(pHeaderStr, pHeader);
  52.         strcat(pHeaderStr, pLenstr);
  53.         strcat(pHeaderStr, "\r\n\r\n");

  54.         printf("%s", pHeaderStr);

  55.         ret = send(fd, pHeaderStr, strlen(pHeaderStr), 0);
  56.         printf("~~~~~~~~~~~ret = %d\n", ret);

  57.         ret = send(fd, pBodyInfo, strlen(pBodyInfo), 0);

  58.         printf("~~~~~~~~~~~ret = %d\n", ret);


  59.         char fileData[20*1024] = {0};

  60.         fp = fopen("./t.jpg", "r");
  61.         if(NULL == fp)
  62.         {
  63.                 printf("photo open failed!\n");
  64.         }
  65.         fseek(fp, 0, SEEK_SET);

  66.         ret = fread(fileData, 1, filesize, fp);
  67.         if(ret != filesize)
  68.         {
  69.                 printf("read file error!\n");
  70.         }

  71.         ret = send(fd, fileData, filesize, 0);
  72.         printf("~~~~~~~~~~~ret = %d\n", ret);

  73.         //ret = send(fd, tail, strlen(tail), 0);
  74.         //printf("~~~~~~~~~~~ret = %d\n", ret);
  75. }


  76. void *ReadThread(void *args)
  77. {
  78.         char buffer[4096] = {0};
  79.         int len = 0;
  80.         while(1)
  81.         {
  82.                 memset(buffer, 0, 4096);
  83.                 len = recv(fd, buffer, 4096, 0);
  84.                 if(len < 0)
  85.                 {
  86.                         printf("recv error!\n");
  87.                 }
  88.                 else if(len > 0)
  89.                 {
  90.                         printf("%s\n", buffer);
  91.                 }
  92.         }
  93. }



  94. int main()
  95. {
  96.         int ret;
  97.         struct sockaddr_in servaddr = {0};
  98.         pthread_t threadId;
  99.        
  100.        
  101.         fd = socket(AF_INET, SOCK_STREAM, 0);
  102.         servaddr.sin_family = AF_INET;
  103.         servaddr.sin_addr.s_addr = inet_addr("52.5.65.32"); //inet_addr("52.71.137.108");34.199.91.254
  104.         servaddr.sin_port = htons(80);

  105.        
  106.         if(0 != connect(fd, (struct sockaddr*)&servaddr, sizeof(servaddr)))
  107.         {
  108.                 printf("connect server failed!\n");
  109.                 return -1;
  110.         }
  111.         else
  112.         {
  113.                 printf("connect server success!\n");       
  114.         }

  115.         ret = pthread_create(&threadId, NULL, ReadThread, NULL);
  116.         if(0 != ret)
  117.         {
  118.                 printf("ReadThread create failed!\n");
  119.         }
  120.         else
  121.         {
  122.                 printf("ReadThread create success!\n");
  123.         }

  124.         httpPost();

  125.         while(1)
  126.         {
  127.                 usleep(100000000);
  128.         }
  129.        
  130.         return 0;
  131. }
复制代码


论坛徽章:
0
发表于 2017-08-24 15:26 |显示全部楼层
用libcurl吧,10几行代码,很简单。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP