0

私は Java コードでリダイレクト (302) を処理しようとしてきましたが、ついにそれを行うことができました。しかし、私は問題に直面しています。つまり、リダイレクトによってページが開かれると、そのページのリンクをクリックすると、ログイン ページに戻ります。

したがって、独自のリダイレクト実装を作成する必要があります。

private HttpMethod loadHttp302Request(HttpMethod method, HttpClient client, int status, String urlString) throws HttpException, IOException {
    if (status != 302)
        return null;

    String[] url = urlString.split("/");

    HttpMethod theMethod = new GetMethod(urlString + method.getResponseHeader("Location")
                                .getValue());
    theMethod.setRequestHeader("Cookie", method.getResponseHeader("Set-Cookie")
                                .getValue());
    theMethod.setRequestHeader("Referrer", url[0] + "//" + url[2]);
    theMethod.setDoAuthentication(method.getDoAuthentication());
    theMethod.setFollowRedirects(method.getFollowRedirects());

    int _status = client.executeMethod(theMethod);

    return theMethod;
}

私の考えでは、セッション Cookie を再送信または保持していない可能性があります。セッション Cookie を再送信または保持するにはどうすればよいですか? 上記のコードに何らかの誤りがある場合は、教えてください。

他のアイデアをいただければ幸いです。

4

1 に答える 1

0

最も可能性の高い問題は、メソッド ( method = theMethod) 内の最終的な代入が の外で何らかの影響を与えると考えているように見えることですloadHttp302Request。(編集:元のコードにはこのステートメントがありましたが、OPは後で変更しました)

そうではありません。

Java には call-by-reference セマンティクスがないため、代入は実質的な効果がありません。次の呼び出しのために応答 (最も重要なのは Cookie) を保持したい場合は、次回の呼び出しに戻っtheMethodてそれを使用する必要があります。何かのようなもの:

private HttpMethod loadHttp302Request(HttpMethod method, HttpClient client, int status, String urlString) throws HttpException, IOException {
    // code as before
    return theMethod;
}
于 2011-12-28T22:55:30.810 に答える