我是靠谱客的博主 孝顺乌龟,最近开发中收集的这篇文章主要介绍移动端搭建Http Server(四)—— 解析HTTP请求Headers,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在移动端搭建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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部