c java http_[C] 类似于HttpClient的C语言实现Http POST功能如何实现?
想自己写个客户端,模拟浏览器向服务器(如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功能如何实现?相关推荐
- java爬虫之基于httpclient的简单Demo(二)
转载自 java爬虫之基于httpclient的简单Demo(二) 延续demo1的 java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一),demo2出炉啦,大家想学爬虫都可以从这 ...
- java mysql点赞功能_用Java做一个类似于微博QQ空间点赞的功能-Fun言
点赞是一个互动性很强的功能,网站加入点赞可以增强用户之间的亲密度,可以利用点赞排出受欢迎文章或者其他的列表,所以今天教大家如何做一个类似于微博.QQ空间的点赞功能 需求分析: 首先要明确这个功能是需要 ...
- java爬虫教程 百度云_java视频教程java爬虫实战项目httpclient hbase springmvc solr
资源内容: java视频教程java爬虫实战项目httpclient hbase springmvc solr|____猫了个咪-更多IT精品课程.html|____猫了个咪--it视频论坛.url| ...
- java在dog中定义name变量,组合构造 冯跃峰 java中组合的应用(不相干的类共同完成一个功能)+构造器回顾...
java中组合的应用(不相干的类共同完成一个功能)+构造器回顾:今天我们了解到java的组合.可以说java组合是非常的重要的.可以对类进行封装,将底层的内容封装起来.甚至于java的继承都没有其重要 ...
- Java平台,标准版Oracle JDK 9中的新功能
Java平台,标准版 Oracle JDK 9中的新增功能 版本9 E77563-05 2017年9月 JDK 9中的新功能概述 Java Platform,Standard Edition 9是一个 ...
- java保护程序aal,ACDK白皮书-AAL语言
ACDK白皮书-AAL语言 翻译:薛长宇 关于AAL语言(Artefaktur Aspects Language)的思想(因为这个语言还在初始开发阶段) 本章内容: 整体概念 前言 AAL和ACDK ...
- Java Web中的EL(表达式语言)详解
Java Web中的EL(表达式语言)详解 表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容.通过EL可以简化在JSP开发中对对象的引用,从而规范页面 ...
- java web项目的目录结构以及各文件夹的功能是什么eclipse的web目录及各作用
创建一个javaweb项目的大致目录结构就是这样的,因为是第一次新建,我们的目录只包含了一些基础的文件夹. 然后我们看一下他们的功能是什么. test:项目名称(也可以是其他名称,尽量和自己创建的项目 ...
- 下列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 ...
最新文章
- 丰度决定了细菌在复杂群落中的功能作用
- linux看硬盘io,linux查看硬盘IO
- 直播 | EMNLP 2020论文解读:从上下文学习还是从实体名字学习?
- python练习12
- matlab产生正态分布样本
- html中显示shell脚本的输出,网页从shell脚本中输入并显示结果
- 617. 合并二叉树
- ForkJoinPool 学习示例
- Linux安装配置类似mac下的docky
- LODOP使用问题解决汇总
- IOS6.0与IOS7.0屏幕适配
- 文本属性之行间距(CSS、HTML)
- python模拟购物车流程_用函数模拟简单的购物车(Python)
- 决策树系列(二)——剪枝
- webpack 生产环境下插件用途
- python数据分析社区_python之数据分析
- 软件测试工程师要具备哪些从业技能?
- 1116: 删除元素(函数)C语言
- Ubuntu Linux虚拟机不识别U盘问题解决
- Win32 IME 编程心得【转】
热门文章
- dslJson、jsoniter、fastjson、jackson解析字符串为map效率比较
- 再温暖的鸡汤不如一场殊死的战争,诸神之战四赛区冠军出炉!
- 神秘粒子可让硬盘体积缩至花生米大小
- Entity Framework 6 Recipes 2nd Edition(9-1)译-用Web Api更新单独分离的实体
- 企业生产环境不同业务的Linux分区方案
- 安装终端服务和终端服务授权,激活终端服务授权
- android点滴 之 进度条
- IDEA如何将项目中文件夹设置为Sources(蓝色)
- NHibernate学习手记(3) - NH的配置信息
- ADO.NET Entity Framework 简介