Как повторно отправить или сохранить файл cookie сеанса - PullRequest
0 голосов
/ 29 декабря 2011

Я пытался обработать редирект (302) в коде Java, и я наконец смог это сделать.Но я сталкиваюсь с проблемой.То есть, как только редирект открывает страницу, щелкнув любую ссылку на странице, я возвращаюсь на страницу входа.

Поэтому мне нужно написать собственную реализацию перенаправления:

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 сессии.Как я могу повторно отправить или сохранить куки-файл сеанса?Если в приведенном выше коде есть какие-либо ошибки, пожалуйста, просветите меня.

Буду признателен за любые другие идеи.

1 Ответ

0 голосов
/ 29 декабря 2011

Наиболее вероятная проблема заключается в том, что вы, похоже, думаете, что окончательное назначение в вашем методе (method = theMethod) имеет какой-либо эффект за пределами loadHttp302Request.( edit : исходный код имел это утверждение, но OP изменил его позже)

Нет.

Java не имеет семантики вызова по ссылке, так что назначение не имеет чистого эффекта.Если вы хотите сохранить ответ (самое главное, файл cookie) для следующего вызова, вам нужно вернуть theMethod и использовать его в следующий раз.Что-то вроде:

private HttpMethod loadHttp302Request(HttpMethod method, HttpClient client, int status, String urlString) throws HttpException, IOException {
    // code as before
    return theMethod;
}
...