想自己写个客户端,模拟浏览器向服务器(如lighttpd等)上传数据。用HTTPrequest抓了包,以下为发送的数据内容:

引用

POST /upload.php HTTP/1.0

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*

Accept-Language: en-us

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0

Content-Length: 180

Host: 192.168.1.180

Content-Type: application/x-www-form-urlencoded

-----------------------------7d93a924b05a2

Content-Disposition: form-data; name="upload_file"; filename="C:\tmp\hello.txt"

Content-Type: text/plain

在实现时,代码大致如下:

#include

#include

#include

#include

#include

// post a big file

#define Req "POST /upload.php HTTP/1.0\r\n"\

"Accept:image/gif, image/x-xbitmap, image/jpeg, image/pjepg, application/vnd.ms-excel, application/msword, applicationvnd.ms-powerpoint, */*\r\n"\

"Accept-Language:en-us\r\n"\

"Accept-Encoding:gzip, deflate\r\n"\

"User-Agent:Mozilla/4.0\r\n"\

"Host:192.168.1.180\r\n"\

"Content-Type:application/x-www-urlencoded\r\n"\

"-----------------------------7d91a515b05a2\r\n"\

"Content-Disposition:form-data;name=\"upload_file\";filename=\"tmp.gz\"\r\n"\

"Content-Type:application/x-gzip\r\n"

#define DST_IP "192.168.1.180"

#define ReqLen sizeof(Req)

int main()

{

struct sockaddr_in srv;

int sock, nbytes;

char sndbuf[1024] = {0};

char recbuf[1024] = {0};

if((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)

{

fprintf(stderr, "socket() error!\n");

exit(1);

}

srv.sin_family = AF_INET;

srv.sin_addr.s_addr = inet_addr(DST_IP);

srv.sin_port = htons(80);

if((connect(sock, (struct sockaddr *)&srv, sizeof(struct sockaddr))) == -1)

{

printf("connect() error!\n");

exit(1);

}

strncpy(sndbuf, Req, ReqLen);

if(write(sock, sndbuf, ReqLen) == -1)

{

fprintf(stderr, "write() error!\n");

exit(1);

}

// get response

int bytes;

while(1)

{

nbytes = read(sock, recbuf, 1023);

if(nbytes < 0)

break;

recbuf[nbytes] = '\0';

printf(recbuf);

}

close(sock);

return 0;

}

先怀疑对HTTP请求的数据封装的格式不对,每次运行client,总会提示400-bad request!这样的错误~~

原本的目标是向lighttpd服务器上传数据(文件较大,一般不小于1G),然后在服务器自己写个cgi来接受/处理数据。现在对上传这部分很头大,看了好久http协议了~~

不知道有没有更好的方法~~ 请路过的各位大侠多多指教~~ 谢过~~

.

c java http_[C] 类似于HttpClient的C语言实现Http POST功能如何实现?相关推荐

  1. java爬虫之基于httpclient的简单Demo(二)

    转载自 java爬虫之基于httpclient的简单Demo(二) 延续demo1的 java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一),demo2出炉啦,大家想学爬虫都可以从这 ...

  2. java mysql点赞功能_用Java做一个类似于微博QQ空间点赞的功能-Fun言

    点赞是一个互动性很强的功能,网站加入点赞可以增强用户之间的亲密度,可以利用点赞排出受欢迎文章或者其他的列表,所以今天教大家如何做一个类似于微博.QQ空间的点赞功能 需求分析: 首先要明确这个功能是需要 ...

  3. java爬虫教程 百度云_java视频教程java爬虫实战项目httpclient hbase springmvc solr

    资源内容: java视频教程java爬虫实战项目httpclient hbase springmvc solr|____猫了个咪-更多IT精品课程.html|____猫了个咪--it视频论坛.url| ...

  4. java在dog中定义name变量,组合构造 冯跃峰 java中组合的应用(不相干的类共同完成一个功能)+构造器回顾...

    java中组合的应用(不相干的类共同完成一个功能)+构造器回顾:今天我们了解到java的组合.可以说java组合是非常的重要的.可以对类进行封装,将底层的内容封装起来.甚至于java的继承都没有其重要 ...

  5. Java平台,标准版Oracle JDK 9中的新功能

    Java平台,标准版 Oracle JDK 9中的新增功能 版本9 E77563-05 2017年9月 JDK 9中的新功能概述 Java Platform,Standard Edition 9是一个 ...

  6. java保护程序aal,ACDK白皮书-AAL语言

    ACDK白皮书-AAL语言 翻译:薛长宇 关于AAL语言(Artefaktur Aspects Language)的思想(因为这个语言还在初始开发阶段) 本章内容: 整体概念 前言 AAL和ACDK ...

  7. Java Web中的EL(表达式语言)详解

     Java Web中的EL(表达式语言)详解 表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容.通过EL可以简化在JSP开发中对对象的引用,从而规范页面 ...

  8. java web项目的目录结构以及各文件夹的功能是什么eclipse的web目录及各作用

    创建一个javaweb项目的大致目录结构就是这样的,因为是第一次新建,我们的目录只包含了一些基础的文件夹. 然后我们看一下他们的功能是什么. test:项目名称(也可以是其他名称,尽量和自己创建的项目 ...

  9. 下列python语言、返回结果不是uc_MKAN1-UC 5103作业代写、代做Analytics作业、Java,Python,c/c++程序语言作业代做...

    MKAN1-UC 5103作业代写.代做Analytics作业.Java,Python,c/c++程序语言作业代做 日期:2020-05-21 11:08 Marketing Analytics Sp ...

最新文章

  1. 丰度决定了细菌在复杂群落中的功能作用
  2. linux看硬盘io,linux查看硬盘IO
  3. 直播 | EMNLP 2020论文解读:从上下文学习还是从实体名字学习?
  4. python练习12
  5. matlab产生正态分布样本
  6. html中显示shell脚本的输出,网页从shell脚本中输入并显示结果
  7. 617. 合并二叉树
  8. ForkJoinPool 学习示例
  9. Linux安装配置类似mac下的docky
  10. LODOP使用问题解决汇总
  11. IOS6.0与IOS7.0屏幕适配
  12. 文本属性之行间距(CSS、HTML)
  13. python模拟购物车流程_用函数模拟简单的购物车(Python)
  14. 决策树系列(二)——剪枝
  15. webpack 生产环境下插件用途
  16. python数据分析社区_python之数据分析
  17. 软件测试工程师要具备哪些从业技能?
  18. 1116: 删除元素(函数)C语言
  19. Ubuntu Linux虚拟机不识别U盘问题解决
  20. Win32 IME 编程心得【转】

热门文章

  1. dslJson、jsoniter、fastjson、jackson解析字符串为map效率比较
  2. 再温暖的鸡汤不如一场殊死的战争,诸神之战四赛区冠军出炉!
  3. 神秘粒子可让硬盘体积缩至花生米大小
  4. Entity Framework 6 Recipes 2nd Edition(9-1)译-用Web Api更新单独分离的实体
  5. 企业生产环境不同业务的Linux分区方案
  6. 安装终端服务和终端服务授权,激活终端服务授权
  7. android点滴 之 进度条
  8. IDEA如何将项目中文件夹设置为Sources(蓝色)
  9. NHibernate学习手记(3) - NH的配置信息
  10. ADO.NET Entity Framework 简介