2009-09-21 5 views
8

Я пытаюсь сделать запрос на веб-страницу, которая требует куки. Я использую HttpURLConnection, но ответ всегда возвращается, говоряCookies отключены с Java URLConnection

<div class="body"><p>Your browser's cookie functionality is turned off. Please turn it on. 

Как я могу сделать запрос таким образом, что запрашиваемый сервер думает, что у меня есть печенье включено. Мой код выглядит примерно так.

private String readPage(String page) throws MalformedURLException { 
    try { 
     URL url = new URL(page); 
     HttpURLConnection uc = (HttpURLConnection) url.openConnection(); 
     uc.connect(); 

     InputStream in = uc.getInputStream(); 
     int v; 
     while((v = in.read()) != -1){ 
      sb.append((char)v); 
     } 
     in.close(); 
     uc.disconnect(); 
    } catch (IOException e){ 
     e.printStackTrace(); 
    } 
    return sb.toString(); 
} 

ответ

10

Вы должны добавить CookieHandler к системе для ее обработки печенья. Перед Java 6 в JRE нет реализации CookieHandler, вы должны написать свой собственный. Если вы находитесь на Java 6, вы можете это сделать,

CookieHandler.setDefault(new CookieManager()); 

Обработка файлов cookie URLConnection очень слабая. Он едва работает. Он не обрабатывает все правила cookie правильно. Вы должны использовать Apache HttpClient, если вы имеете дело с чувствительными файлами cookie, такими как аутентификация.

+0

Теперь мне нужно выяснить, как выполнить проверку подлинности http-прокси. Я работал с URLConnection, но теперь мне нужно понять это здесь. tsok, google будет искать что-то для меня;) спасибо! – dharga

1
uc.getHeaderFields() 
// get cookie (set-cookie) here 

URLConnection conn = url.openConnection(); 
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2"); 
conn.addRequestProperty("Referer", "http://xxxx"); 
conn.addRequestProperty("Cookie", "..."); 
-4

Если вы пытаетесь очистить большие объемы данных после входа в систему, вам может быть даже лучше с помощью скриптового веб-скребка, такого как WebHarvest (http://web-harvest.sourceforge.net/). Я использовал его с большим успехом в некоторых своих проектах.

2

Я думаю, что сервер не может определить при первом запросе, что клиент не поддерживает файлы cookie. Таким образом, возможно, сервер отправляет перенаправления. Попробуйте отключить переадресацию:

uc.setInstanceFollowRedirects(false); 

Тогда вы будете иметь возможность получить печенье из ответа и использовать их (если необходимо) при следующем запросе.

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