2010-01-15 5 views
2

Я пытаюсь войти и получить информацию о статусе с помощью HTTPS-URL с помощью Java-программирования. Я могу войти в /login.cgi, указав имя пользователя и пароль с запросом POST на этот скрипт.HTTPS-аутентификация и файлы cookie через Java

Затем сценарий проверяет учетные данные и создает конкретный файл cookie (с информацией о сеансе, именем пользователя и т. Д.), А затем сразу же вызывает заголовок ответа местоположения на /home.cgi. Который, я предполагаю, сценарий /home.cgi проверяет информацию cookie перед продолжением загрузки. В противном случае он просто вернется на страницу /login.cgi.

Все это прекрасно работает в браузере из-за того, что браузеры cookie браузера правильно обрабатываются. Однако в Java это очень сложно, потому что я не могу получить соответствующий файл cookie для отправки в качестве запроса на последующие страницы. Я не могу получить правильный файл cookie, потому что я не могу вернуть ответ HTTP (который содержит правильное значение «Set-cookie») между /login.cgi, создающим конкретный файл cookie, и он вызывает Location /home.cgi.

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

Спасибо за помощь,

Стив

ответ

4

Управление файлами cookie по умолчанию не включено в HTTP-API java.net. Если вам не нужны какие-либо конкретные обработка или кросс-приложение к кукам (куки будут удалены, когда приложение завершается), вы можете просто включить его с помощью

CookieHandler.setDefault(new CookieManager()); 
+0

Итак, этот оператор автоматически включит файлы cookie в Java-программе, аналогичные версии браузера? –

+0

Да, вы можете просто вызвать его в начале вашего основного метода, а позже все HTTP-запросы через java.net.URL будут использовать хранилище файлов cookie, аналогичное тому, как браузеры обрабатывают файлы cookie. – jarnbjo

+0

Да, это сработало. Тем не менее, мне пришлось корректировать политику cookie на нем, чтобы принять все файлы cookie. CookieManager customCookieManager = new CookieManager(); customCookieManager.setCookiePolicy (CookiePolicy.ACCEPT_ALL); CookieHandler.setDefault (customCookieManager); Спасибо за помощь. –

1

Как вы делаете соединения HTTP и управление куки?

Я бы порекомендовал просто использовать commons-httpclient, а не управлять этим самостоятельно. Это будет automatically manage cookies для вас.

+0

Каких преимуществ вы ожидаете от Общин HTTPClient по сравнению с встроенный стандартный API? – jarnbjo

+0

Это API был намного проще в использовании, чем стандартный, хотя я не знаком с недавними обновлениями для java.net. –

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