从包含HTTP标头的String中提取值

时间:2013-02-10 16:33:49

标签: java http

我正在寻找一种更好的方法从包含HTTP标头的String中提取数据。例如,我想从字符串的内容长度部分获取数字160:“Content-Length:160 \ r \ n”。

似乎HTTP标头中的所有数据都以名称,冒号和空格开头,并且值紧跟在'\ r'和'\ n'字符后面。

目前我正在这样做:

int contentLengthIndex = serverHeader.lastIndexOf("Content-Length: ");
int contentLastIndex = serverHeader.length()-1;
String contentText = serverHeader.substring(contentLengthIndex + 16, contentLastIndex);
contentText = contentText.replaceAll("(\\r|\\n)", "");
int contentLength = Integer.parseInt(contentText);

但它似乎很乱,只有在字符串末尾获得“Content-Length”才有用。是否有一个更好的更通用的解决方案,用于从包含HTTP标头的String中提取值,该标头可以调整为用于获取int值或String值?

我还应该提一下,连接需要能够在请求之后将数据返回给浏览器,根据我的理解,这使我无法获得使用HttpURLConnection的好处。

3 个答案:

答案 0 :(得分:2)

快速解决方案将是:

new Scanner(serverHeader).useDelimiter("[^\\d]+").nextInt());

另一种方法,如果你想创建标题的Hashtable

 String[] fields = serverHeader.trim().split(":");

 String key = fields[0].trim();
 String value = fields[1].trim();

我不确定你为什么要这本手册,已经有了这个API!

答案 1 :(得分:0)

您是否尝试过剥离字符串中的所有非数字字符?

serverHeader = serverHeader.replaceAll("[^\\d.]", "");

答案 2 :(得分:0)

如果您使用Socket课程阅读HTTP数据,建议您使用HttpURLConnection,因为它为您提供了解析Header Fields的便捷方法。

它有public Map getHeaderFields()方法,您可以使用它来获取所有字段。

如果您希望指南开始使用HttpURLConnection,您可以看到它here