概述
在移动端搭建Http Server(二)—— 实现监听并验证中用代码实现了监听远端请求,根据移动端搭建Http Server(三)—— HTTP协议讲解的基础知识,本节实现一下提取HTTP请求Header中的数据。
1.数据流中每个字节都是连起来的,所以要根据流中的rn来取每一行数据
思路:用两个变量来记录,变量1记录上一个字节,变量2记录当前访问字节,当变量1为r且变量2为n时,表示一行数据结束。
2.实现一下,新建StreamToolKit类来处理流数据
public static final String readLine(InputStream in) throws IOException {
StringBuilder sb = new StringBuilder();
int c1 = 0;
int c2 = 0;
// c2=-1表示遍历到流的结尾
while (c2 != -1 && !(c1 == 'r' && c2 == 'n')) {
c1 = c2;
c2 = in.read();
sb.append((char) c2);
}
if (sb.length() == 0)
return null;
return
sb.toString();
}
3.在原来的code的基础上调用readLine方法
/**
* 处理连接后的操作
* @param remotePeer
*/
private void onAcceptRemotePeer(Socket remotePeer) {
try {
//
remotePeer.getOutputStream().write("connected success".getBytes());
InputStream in = remotePeer.getInputStream();
String headerLine = null;
while ((headerLine = StreamToolKit.readLine(in)) != null){
// 头数据会以两个rn结尾
if (headerLine.equals("rn"))
break;
System.out.println("headers is :" + headerLine);
}
} catch (IOException e) {
Log.e("an-server", e.toString());
}
}
4.运行验证一下,在浏览器地址栏中输入手机IP和端口看一下打印结果
输入服务地址
查看Logcat结果
这些是浏览器发送过来的
5.为了方便后续使用获取到的信息,将它存在HttpContext类中
public class HttpContext {
private final HashMap<String, String> requestHeaders;
public HttpContext() {
requestHeaders = new HashMap<String, String>();
}
private Socket underlySocket;
public void setUnderlySocket(Socket underlySocket) {
this.underlySocket = underlySocket;
}
public Socket getUnderlySocket() {
return underlySocket;
}
public void addRequestHeader(String headerKey, String headerValue) {
requestHeaders.put(headerKey, headerValue);
}
public
String getRequestHeaderValue(String headerKey){
return requestHeaders.get(headerKey);
}
}
在onAcceptRemotePeer中做一点改动
private void onAcceptRemotePeer(Socket remotePeer) {
try {
//
remotePeer.getOutputStream().write("connected success".getBytes());
HttpContext httpContext = new HttpContext();
httpContext.setUnderlySocket(remotePeer);
InputStream in = remotePeer.getInputStream();
String headerLine = null;
while ((headerLine = StreamToolKit.readLine(in)) != null){
// 头数据会以两个rn结尾
if (headerLine.equals("rn"))
break;
System.out.println("headers is :" + headerLine);
String[] pair = headerLine.split(": ");
httpContext.addRequestHeader(pair[0], pair[1]);
}
} catch (IOException e) {
Log.e("an-server", e.toString());
}
}
至此,解析Headers就封装完成了,源码依旧push到了github上
https://github.com/jianiuqi/AndroidServer
下篇中讲解了URL路由配置,简单的处理了上传和下载
移动端搭建Http Server(五)—— 实现URL路由模块
最后
以上就是孝顺乌龟为你收集整理的移动端搭建Http Server(四)—— 解析HTTP请求Headers的全部内容,希望文章能够帮你解决移动端搭建Http Server(四)—— 解析HTTP请求Headers所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复