4

HTTP ヘッダーを含む文字列からデータを抽出するより良い方法を探しています。たとえば、「Content-Length: 160\r\n」という文字列のコンテンツ長部分から数値 160 を取得したいと考えています。

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」を取得するためだけに適しています。int 値または String 値の両方を取得するために調整できる HTTP ヘッダーを含む String から値を抽出するための、より普遍的なソリューションはありますか?

また、接続はリクエスト後にブラウザにデータを返すことができる必要があることにも言及する必要があります。これは、私の理解では、HttpURLConnection を使用する利点を享受することを妨げています。

4

4 に答える 4

2

簡単な解決策は次のとおりです。

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

Hashtableヘッダーを作成する場合は、別の方法:

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

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

なぜこのマニュアルを作成しているのかわかりませんが、このための API が既にあります!

于 2013-02-10T16:44:10.447 に答える
1

クラス java.net.HttpURLConnection を使用

編集済み: メソッド URLConnection.getContentLength() および URLConnection.getContentLengthLong() も

于 2013-02-10T16:52:58.497 に答える
0

クラスを使用してデータSocketを読み取る場合は、を解析するための便利なメソッドを提供するため、使用することをお勧めします。HTTPHttpURLConnectionHeader Fields

public Map getHeaderFields()すべてのフィールドを取得するために使用できるメソッドがあります。

ガイドの使用を開始したい場合は、ここでHttpURLConnection確認できます。

于 2013-02-10T17:05:00.683 に答える
0

文字列から数字以外のすべての文字を削除しようとしましたか?

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

于 2013-02-10T16:36:39.617 に答える