1

与えられた HTTP リクエスト:

Client: GET /Default.aspx HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave
-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-
xpsdocument, application/xaml+xml, */*
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET
 CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Accept-Encoding: gzip, deflate
Host: logan-pc:8080
Connection: Keep-Alive

Hostプログラムで行を変更するにはどうすればよいですか? 正規表現を使用してみましたが (これをガイドとして使用)、正しいパターンがわかりません。

これは私が今使っているパターンです:

".*?Host:.*?:" + <dynamic port number goes here>+ ".*?"

パターンをコンパイルするときPattern.DOTALL、リンクされた質問で提案されているようにフラグを使用します。

更新:ブラウザから直接リクエスト文字列を取得します。これが現在使用しているものです:

int len = 0;
while((len = ConnHandler.this.clientIn.read(buf)) > 0)
{
    System.out.println(".*?Host:.*?:" + ConnHandler.this.serverport+".*?");
    String in = new String(buf, 0, len);
    in.replaceAll(".*?Host:.*?:" + ConnHandler.this.serverport+".*?", "localhost:" + ConnHandler.this.serverport);
    //...
}

それでもまだ機能していません。

4

2 に答える 2

0

あなたのパターンは正しいです。このコードは私のために働きます:

String string = "Accept-Encoding: gzip, deflate\nHost: logan-pc:8080\nConnection: Keep-Alive";
System.out.println(string.replaceAll(".*?Host:.*?:8080.*?", "Host: NEW_HOST:8080"));

出力:

Accept-Encoding: gzip、デフレート

ホスト: NEW_HOST:8080

接続: キープアライブ

于 2013-01-18T13:25:49.783 に答える