【问题标题】:Java - can I use browser cookies to directly access data on a website?Java - 我可以使用浏览器 cookie 直接访问网站上的数据吗?
【发布时间】:2018-02-10 04:51:02
【问题描述】:
使用 Firefox 浏览器,我可以访问网站。使用 cookie 我不必每次都登录。
当这不是一个聪明的问题时,请解释一下 - 所以我知道该怎么做:
问题:使用浏览器登录后,我可以启动 Java 应用程序并重新使用浏览器中的 cookie 直接访问网站上的数据吗?那么,像浏览器一样,跳过登录过程?
为什么 - 在我的情况下,使用浏览器登录很容易。从 Java 应用程序登录很困难。
我希望你能帮助或解释。
【问题讨论】:
标签:
java
cookies
apache-httpclient-4.x
apache-commons-httpclient
【解决方案1】:
你可以在 firefox 上安装一个 firebug 插件,然后按 F12 运行它,转到网络选项卡,激活它,登录到你的页面,你会看到请求的样子。在简单的场景中,您需要的只是一个 cookie,服务器将对您进行身份验证。您很可能还需要设置 user.agent 属性(没有它,某些服务不允许访问),例如。
java.net.URLConnection c = url.openConnection();
c.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
System.setProperty("http.agent", "");
要确定确切的用户代理,请启动一个 http 服务器端口,从浏览器连接到它并打印传入的流。
您还可以查看 cookie 的存储方式。
尝试在您的 java 代码中模仿浏览器的行为。
有些网站使用其他身份验证机制,但比较少见。
【解决方案2】:
是的,使用CookieManager 和CookieStore。还要检查CookiePolicy
CookieManager cookiemanager = new CookieManager();
cookiemanager.setCookiepolicy(CookiePolicy.ACCEPT_ALL);
// maybe you need ACCEPT_ORIGINAL_SERVER
然后用CookieStore获取cookie
CookieStore cookieStore = cookieManager.getCookieStore();
List cookieList = cookieStore.getCookies();
// here you have your cookies list
for (HttpCookie cookie : cookieList) {
}
Find here an example
【解决方案3】:
- 我们知道cookie是由服务器生成然后发送给用户的。
- 如果客户端浏览器允许 cookie,cookie 将存储在客户端计算机上。
- 所以,当然你可以在cookie中存储一些登录信息,并在requset头中添加cookie,然后服务器获取cookie并知道你已经登录了。