Java后台获取Cookie

Cookie概念:Cookie服务器发送给浏览器的一小段文本信息

Java后台获取Cookie正常操作:

Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length > 0){
     for (Cookie cookie : cookies){
         return cookie.getName() + " " + cookie.getValue();
     }
 }       

但是,只能获取自己域里的cookie,即localhost域下的Cookie,无法获取其他域里的Cookie。

获取其他域里的Cookie:

1.通过浏览器开发者模式查看相应域里的Cookie,通过Cookie获取值;

2.通过HttpClient向服务器发送登录请求,获取相应结果里的Set-Cookie,下次向服务器发送请求时带上Cookie;

3.通过WebMagic框架selenium模拟浏览器实现登陆

方法二案例:

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import org.apache.http.Consts;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
 * @auther mxh
 * @time 2019/5/20 13:48
 */
public class ZhiHuTest {

    public static void main(String[] args) throws java.text.ParseException {
        String name = "******@qq.com"; //
        String password = "******"; //

        // 全局请求设置
        RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();
        // 创建cookie store的本地实例
        CookieStore cookieStore = new BasicCookieStore();
        // 创建HttpClient上下文
        HttpClientContext context = HttpClientContext.create();
        context.setCookieStore(cookieStore);

        // 创建一个HttpClient
        CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig)
                .setDefaultCookieStore(cookieStore).build();

        CloseableHttpResponse res = null;

        // 创建本地的HTTP内容
        try {
            try {
                // 创建一个get请求用来获取必要的Cookie,如_xsrf信息
                HttpGet get = new HttpGet("http://www.zhihu.com/");

                res = httpClient.execute(get, context);
                // 获取常用Cookie,包括_xsrf信息
                System.out.println("访问知乎首页后的获取的常规Cookie:===============");
                for (Cookie c : cookieStore.getCookies()) {
                    System.out.println(c.getName() + ": " + c.getValue());
                }
                res.close();

                // 构造post数据
                List<NameValuePair> valuePairs = new LinkedList<NameValuePair>();
                valuePairs.add(new BasicNameValuePair("email", name));
                valuePairs.add(new BasicNameValuePair("password", password));
                valuePairs.add(new BasicNameValuePair("remember_me", "true"));
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(valuePairs, Consts.UTF_8);
                entity.setContentType("application/x-www-form-urlencoded");

                // 创建一个post请求
                HttpPost post = new HttpPost("https://www.zhihu.com/login/email");
                // 注入post数据
                post.setEntity(entity);
                res = httpClient.execute(post, context);

                // 打印响应信息,查看是否登陆是否成功
                System.out.println("打印响应信息===========");
                System.out.println(res.toString());
                res.close();

                System.out.println("登陆成功后,新的Cookie:===============");
                for (Cookie c : context.getCookieStore().getCookies()) {
                    System.out.println(c.getName() + ": " + c.getValue());
                }

                // 构造一个新的get请求,用来测试登录是否成功
                HttpGet newGet = new HttpGet("https://www.zhihu.com/question/293207596/answer/684673400");
                res = httpClient.execute(newGet, context);
                String content = EntityUtils.toString(res.getEntity());
                System.out.println("登陆成功后访问的页面===============");
                System.out.println(content);
                res.close();

            } finally {
                httpClient.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

上述代码,只要网站登陆登录过程不是太繁琐,如需要验证则不太实用

方案三实现代码:

// 自动登陆方法
    public void login() {
        //注册chrome
        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("http://login.jiayuan.com/?refrer=http://www.jiayuan.com&host=0");// 打开网址
        // 防止页面未能及时加载出来而设置一段时间延迟
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 设置用户名密码
        driver.findElement(By.id("login_email")).sendKeys("15735400536"); // 用户名
        driver.findElement(By.id("login_password")).sendKeys("mxh970923"); // 密码
        // 模拟点击   //form[@id=‘form-group-login‘]/button
        driver.findElement(By.xpath("//*[@id=\"login_btn\"]"))
                .click(); // xpath语言:id为form-group-login的form下的button

        // 防止页面未能及时加载出来而设置一段时间延迟
        try {
            Thread.sleep(15000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 获取cookie信息
        cookies = driver.manage().getCookies();

        driver.close();
    }

原文地址:https://www.cnblogs.com/mxh-java/p/10896866.html

时间: 2024-10-12 01:05:01

Java后台获取Cookie的相关文章

java后台获取cookie里面值得方法

String admissionNo = ""; //得到所有的cookies Cookie[] cookies = this.getRequest().getCookies(); Cookie cookie = null;//设置一个为null的cookie //循环cookies得到每个具体的cookie值 for (int j = 0; j < cookies.length; j++) { cookie = cookies[j]; if (cookie.getName().

js、Java后台设置cookie

概述:小开心下,又学到了点东西 JS设置cookie //添加时间函数 function SetCookie(name, value){ var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); document.cookie = name + "=" + escape(value) + ";path=/;expires=" + exp.

java后台获取Access_token的工具方法

本方法主要通过java后台控制来获取Access_token,需要你已经知道自己的ID跟密码 因为微信的权限设置大概每天可以获取两千条,每条有效时间为2小时 1 /** 2 * 输入自己的id跟密码,获取微信的安全密令字符串 3 * @param APP_ID 4 * @param APPSECRET 5 * @return 6 */ 7 public static String getAccess_token( String APP_ID,String APPSECRET) { 8 //设置变

微信小程序:java后台获取openId

一.功能描述 openId是某个微信账户对应某个小程序或者公众号的唯一标识,但openId必须经过后台解密才能获取(之前实现过前台解密,可是由于微信小程序的种种限制,前台解密无法在小程序发布后使用) 二.实现流程 1. 获取微信用户的登录信息: 2. 将encryptedData中的数据作为参数传给java后台 3. java后台进行解密 三.代码实现 1. 后台的解密代码 1 /** 2 * decoding encrypted data to get openid 3 * 4 * @para

ASP.NET后台获取cookie中文乱码解决办法

项目中有一功能,需要从一个页面前台使用cookie保存json数据,并传递到第二个页面.要在第二个页面中获取cookie中的json的值,没有任何处理情况下,获取的字符串为乱码,就连符号都是乱码的.百度了下,找到以下解决方法,解决问题.记录如下,供参考: string json = Request.Cookies["json"].Value; System.Text.Encoding enc = System.Text.Encoding.GetEncoding("gb2312

spring 框架java后台获取的中文解决办法

首先,jsp页面的编码必须是一致的,我这里是有的UTF-8,如: <%@page  contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> 接着,可以使用spring 的CharacterEncod

redis 概述和阿里云redis搭建和java后台获取

一.redis概述 微信红包.淘宝.天猫.京东都使用redis redis是一种nosql 现在比较流行的nosql redis.memcached.mongodb.guava(loadingCache) redis支持多种数据类型:字符串(strings).散列(hashes). 列表(lists). 集合(sets). 有序集合(sorted sets) membercache不支持内存持久化,redis支持两种内存持久化 rdb 全量数据备份  aof 增量备份指令 缓存数据过期机制 概念

jquery.cookie.js &amp;&amp; java后台代码 操作cookie实现记住当前用户输入信息代码

下载jquery.cookie.js地址看这里:http://pan.baidu.com/s/1gdCPaN5 //初始化页面时验证是否记住了密码 $(document).ready(function() {   if ($.cookie("rmbUser") == "true") { //判断上次登陆是否已记住密码 $("#rmbUser").attr("checked", true); //设置记住密码复选框选中 //$.

Java通过httpclient获取cookie模拟登录

package Step1; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.httpc