本篇文章给大家谈谈java解析http报文头,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、如何实现java解析网络协议报文2、求java socket请求http的报文头格式!!!3、javaweb里get请求头报文信息含义是什么啊4、java 解析http请求数据
如何实现java解析网络协议报文
普通参数:
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
文件参数:
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
参数实体的最后一行是: –加上boundary加上–,最后换行,这里的 格式即为: –OCqxMF6-JxtxoMDHmoG5W5eY9MGRsTBp–。
模拟文件上传请求
public static void uploadFile(String fileName) {
try {
// 换行符
final String newLine = “\r\n”;
final String boundaryPrefix = “–“;
// 定义数据分隔线
String BOUNDARY = “========7d4a6d158c9”;
// 服务器的域名
URL url = new URL(“”);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置为POST情
conn.setRequestMethod(“POST”);
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 设置请求头参数
conn.setRequestProperty(“connection”, “Keep-Alive”);
conn.setRequestProperty(“Charsert”, “UTF-8”);
conn.setRequestProperty(“Content-Type”, “multipart/form-data; boundary=” + BOUNDARY);
OutputStream out = new DataOutputStream(conn.getOutputStream());
// 上传文件
File file = new File(fileName);
StringBuilder sb = new StringBuilder();
sb.append(boundaryPrefix);
sb.append(BOUNDARY);
sb.append(newLine);
// 文件参数,photo参数名可以随意修改
sb.append(“Content-Disposition: form-data;name=\”photo\”;filename=\”” + fileName
+ “\”” + newLine);
sb.append(“Content-Type:application/octet-stream”);
// 参数头设置完以后需要两个换行,然后才是参数内容
sb.append(newLine);
sb.append(newLine);
// 将参数头的数据写入到输出流中
out.write(sb.toString().getBytes());
// 数据输入流,用于读取文件数据
DataInputStream in = new DataInputStream(new FileInputStream(
file));
byte[] bufferOut = new byte[1024];
int bytes = 0;
// 每次读1KB数据,并且将文件数据写入到输出流中
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
// 最后添加换行
out.write(newLine.getBytes());
in.close();
// 定义最后数据分隔线,即–加上BOUNDARY再加上–。
byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine)
.getBytes();
// 写上结尾标识
out.write(end_data);
out.flush();
out.close();
// 定义BufferedReader输入流来读取URL的响应
//BufferedReader reader = new BufferedReader(new InputStreamReader(
// conn.getInputStream()));
//String line = null;
//while ((line = reader.readLine()) != null) {
// System.out.println(line);
//}
} catch (Exception e) {
System.out.println(“发送POST请求出现异常!” + e);
e.printStackTrace();
}
}
求java socket请求http的报文头格式!!!
手中不是自己的电脑 没环境调试不了 不过我找了下面的内容 你看有帮助没:
最近,需要编写一个工具模拟HTTP Client, 登录到一个Server并且要添加一些数据。出现的问题是:login可以成功,但是,添加数据时,总是报错如下:
HTTP/1.1 505 HTTP Version Not Supported
Server: Apache-Coyote/1.1
Date: Wed, 26 Aug 2009 03:20:19 GMT
Connection: close
根据错误的提示,应该是HTTP版本不一致,可是,第一次login都成功了,说明版本应该没有问题呀。
找了好多资料,都说版本有问题。
最后,终于找到最终的原因了,HTTP写的格式是非常严谨的,只要格式不匹配,就会报错误。
我在HTTP的头中添加一个空格:
HTTP/1.1[空格在此]
Accept: */*
Accept-Language: zh-cn
Host: 10.224.54.126:8080
Cookie: F5_CREDENTIAL=L7a
Connection: Keep-Alive
在提交请求,连login都不可以了,而且报的错误是:HTTP/1.1 505 HTTP Version Not Supported
从此可以推断出,我的添加数据的消息中可能某个地方多了一个空格。
经过仔细的查找,果然,找到了几个空格,用%20替代之,问题解决了。
另:我也在javaeye里面混,只是好久没去了,有机会交流交流
javaweb里get请求头报文信息含义是什么啊
常见的HTTP报文头属性
Accpet
告诉服务端,客户端接收什么类型的响应
Referer
表示这是请求是从哪个URL进来的,比如想在网上购物,但是不知道选择哪家电商平台,你就去问度娘,说哪家电商的东西便宜啊,然后一堆东西弹出在你面前,第一给就是某宝,当你从这里进入某宝的时候,这个请求报文的Referer就是
Cache-Control
对缓存进行控制,如一个请求希望响应的内容在客户端缓存一年,或不被缓可以通过这个报文头设置
Accept-Encoding
例如:Accept-Encoding:gzip, deflate(这两种都是压缩格式)
这个属性是用来告诉服务器能接受什么编码格式,包括字符编码,压缩形式(一般都是压缩形式)
Host
指定要请求的资源所在的主机和端口
User-Agent 作用:告诉服务器,客户端使用的操作系统、浏览器版本和名称
java 解析http请求数据
string p1=request.getParameter(“p1”);
string p2=request.getParameter(“p2”);
这样就获取到数据了,然后你就可以存进数据库中或者进行数据处理。
java解析http报文头的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java解析http报文头的信息别忘了在本站进行查找喔。