2

出力から、ウェブサイトのホームページが更新され、リクエストが他のページにリダイレクトされることがわかりました。これはブラウザでは問題なく発生しますが、コードでは発生しません。では、そのリダイレクトに沿ってどのように前進しますか?

try {
            URL url = StringUtils.stringToURL(link);
            URLConnection dbGatewayURL = url.openConnection();
            dbGatewayURL.setConnectTimeout(timeout);
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    dbGatewayURL.getInputStream()));
            StringBuffer responseData = new StringBuffer();
            String line = "";
            while ((line = in.readLine()) != null) {
                responseData.append(line + "\n");
            }

出力は次のとおりです。

<HEAD>
<META HTTP-EQUIV=REFRESH CONTENT="0;URL=/sites/engbm">
</HEAD>

これを実行しようとすると、予期しないファイルの終わりの例外が発生しますhttpUrlConn.setRequestMethod("HEAD");

4

2 に答える 2

2

http ヘッダーを詳しく調べる必要があります。リダイレクトの応答コードは 302 です。また、すべてのリダイレクト応答にはロケーション ヘッダーが付属しています。一般的なリダイレクト応答は次のとおりです。

HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/
Content-Type: text/html
Content-Length: 174

応答コード ( HttpURLConnection.getResponseCode()) を読み取り、次にヘッダーを読み取り、ヘッダーの値を取得して、Locationこの URL に対して新しい要求を行います。

于 2012-08-05T17:53:45.950 に答える
2

<META HTTP-EQUIV=REFRESH>出力を解析してタグを探す必要があります。これは、コンテンツ自体に対応する応答ヘッダーが含まれていることをブラウザーに伝えます。この場合、数秒/sites/engbm後にリダイレクトするようブラウザに指示しています。0の目的を明確にするMETA HTTP-EQUIVために:http://www.w3schools.com/tags/att_meta_http_equiv.asp

http-equiv 属性は、コンテンツ属性の情報/値の HTTP ヘッダーを提供します。

http-equiv 属性を使用して、HTTP 応答ヘッダーをシミュレートできます。

name 属性が設定されている場合、http-equiv 属性は設定しないでください。

はどうかと言うと:

しようとすると、予期しないファイルの終わりの例外が発生しますhttpUrlConn.setRequestMethod("HEAD");

これは、HEADリクエストにレスポンス ボディがないためです。

于 2012-08-05T18:02:30.270 に答える