0

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

Так что я должен написать свою собственную реализацию редиректа:

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

спасибо. .. в дальнейшем придет. – Ahmed

ответ

0

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

Это не так.

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

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

Спасибо за ответ, но, пожалуйста, проверьте код перед отправкой ответа. – Ahmed

+0

Вы изменили это право между моими ответами. Проблема решена, теперь вы возвращаете 'HttpMethod'? –

+0

nope. Все еще на той же странице ... Перенаправление работает, но, как я уже говорил, однажды нажал на любую ссылку на странице, он отправил меня обратно в логин ... – Ahmed