Файлы cookie отключены с помощью Java URLConnection - PullRequest
8 голосов
/ 21 сентября 2009

Я пытаюсь сделать запрос к веб-странице, которая требует куки. Я использую HTTPUrlConnection, но ответ всегда возвращается, говоря:

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

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

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();
}

Ответы [ 4 ]

10 голосов
/ 21 сентября 2009

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

  CookieHandler.setDefault(new CookieManager());

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

2 голосов
/ 21 сентября 2009

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

uc.setInstanceFollowRedirects(false);

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

1 голос
/ 21 сентября 2009
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", "...");
0 голосов
/ 21 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...