2011-12-27 7 views
4

Я пытаюсь обработать перенаправление (302) в Java-коде ... И код, который у меня есть, использует org.apache.commons.httpclient.HttpClient, который не объявляет setRedirectStrategy(), поэтому мне нужно написать свою собственную реализацию переадресации:Обработка перенаправления 302 в Java

private void loadHttp302Request(HttpMethod method, HttpClient client, 
      int status, String urlString) throws HttpException, IOException { 
     if (status!=302) 
      return; 
     String[] url = urlString.split("/"); 
     logger.debug("Method -> loadHttp302Request -> Location : " + method.getResponseHeader("Location") 
       .getValue()); 

     logger.debug("Method -> loadHttp302Request -> Cookies : " + method.getResponseHeader("Set-Cookie") 
       .getValue()); 

     logger.debug("Method -> loadHttp302Request -> Referrer : " + url[0]+"//"+url[2]); 

     HttpMethod theMethod = new GetMethod(urlString+method.getResponseHeader("Location") 
       .getValue()); 
     theMethod.setRequestHeader("Cookie", method.getResponseHeader("Set-Cookie") 
       .getValue()); 
     theMethod.setRequestHeader("Referrer",url[0]+"//"+url[2]); 
     int _status = client.executeMethod(theMethod); 
     logger.debug("Method -> loadHttp302Request -> Status : " + _status); 
     method = theMethod; 
    } 

После этого выполняется, код состояния равен 200, так что кажется, что все работает, но тело ответа и responsestream оба нуль. Я смог обнюхать TCP-поток с помощью wirehark и, насколько это касается Wireshark, я возвращаю весь тело ответа из моего кода перенаправления ... Поэтому я не уверен, что я делаю неправильно или что искать дальше ... в идеале было бы хорошо, если бы я мог бы использовать setRedirectStrategy(), а потому, что это код клиента: р я застрял с помощью org.apache.commons.httpclient.HttpClient ...

Я отлажена вниз executeMethod() и обнаружили, что при чтении ответа от входной поток, кажется, ничего не получает, хотя wirehark, безусловно, показывает, что я получил полный орган ответа.

Любые идеи будут оценены :)

+0

В 'getMethod'' urlString' следует заменить 'url [0] +" // "+ url [2]' не так ли? –

+0

Нет ... Тогда у вас будет путь = http://www.abc.com/www.abc.com – Ahmed

ответ

1

method = theMethod; в конце loadHttp302Request не собирается делать что-нибудь полезное. Когда возвращается loadHttp302Request, указатель объекта method в вашем методе вызова (java) по-прежнему будет указывать на исходный объект HttpMethod.

Возврат theMethod от loadHttp302Request и получить от этого содержимое ответа.

+0

Спасибо за ответ. Я вернул 'theMethod' из метода loadHttp302Request' и вместо того, чтобы копировать содержимое' theMethod', я сделал следующее: 'int status = httpClient.executeMethod (theMethod); HttpMethod requestMethod = loadHttp302Request (theMethod, httpClient, status, urlStr); if (requestMethod! = Null) { \t theMethod = requestMethod; } ' Теперь он открывает веб-страницу, но когда я нажимаю на любую ссылку на веб-странице, она возвращает меня на мою страницу входа. Есть идеи? – Ahmed

+0

Возможно, вы не сохраняете и повторно отправляете cookie сессии правильно. Сначала я проверил бы это. – Alohci

+0

Как я смогу сохранить и повторно отправить файлы cookie сеанса? – Ahmed

Смежные вопросы