不使用第 3 方库(Core Java)从 HTTP 请求字符串解析 HTTP 标头的最佳方法

Zug*_*dud 5 java http

给定一个 HTTP 请求标头,有没有人有建议或知道正确解析标头的现有代码?我正在尝试仅使用 Core Java 来执行此操作,没有第三方库

编辑:

尝试从此字符串中查找关键字段,例如:

GET / HTTP/1.1User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15Host: localhost:9000Accept: /

想解析出Method和方法

Ren*_*ato 5

我编写了一个库RawHTTP,其唯一目的是解析 HTTP 消息(请求和响应)。

如果您不想使用库,您可以将源代码复制到您自己的代码库中,从以下位置开始: https: //github.com/renatoahaydes/rawhttp/blob/a6588b116a4008e5b5840d4eb66374c0357b726d/rawhttp-core/src/main/ java/com/ahaydes/rawhttp/core/RawHttp.java#L52

这会将 HTTP 消息的行一直分割到元数据部分的末尾(起始行 + 标头)。

有了元数据行列表,您就可以调用该parseHeaders方法,该方法将为您创建标头。您可以轻松地将其调整为仅返回 a ,Map<String, List<String>>以避免还必须导入标头类。

这就是说...... RawHTTP 没有依赖项,所以我只会使用它:) 但由你决定。


小智 4

首先阅读并理解HTTP 规范

请求行和标头由 CR LF 序列(十进制值 13 和 10 的字节)分隔,因此您可以读取流并分离出每一行。我相信标头必须以 US-ASCII 进行编码,因此您可以简单地将字节转换为字符并附加到 a StringBuilder(但请检查规范:它可能允许 ISO-8859-1 或其他编码)。

标头的结束由 CR LF CR LF 表示。