折腾:
【未解决】用Java实现百度模拟登陆
期间,已经可以用OkHttp获取响应了。
但是需要去:获取response中的cookie,和管理cookie
okhttp cookie
别人建议用:PersistentCookieJar
去下载
结果下载得到
PersistentCookieJar-1.0.1.zip

解压却没有jar
download PersistentCookieJar jar
PersistentCookieJar,在SharedPreferences上,基于 OkHttp 3的持久CookieJar实现,下载PersistentCookieJar的源码_GitHub_帮酷
下载不到PersistentCookieJar的jar
去IDEA的Maven中搜
结果搜出来的不是:

【已解决】Java用IntelliJ IDEA如何用gradle去安装第三方库PersistentCookieJar
然后继续调试,看看访问多个百度的url,之后是否会自动更新cookie
此处显示确保代码正常运行:
把百度首页的html保存后,点击用浏览器打开:

效果是:

代码代码写了:
1 2 3 4 5 6 7 8 9 | public class EmulateBaiduLogin { / / OkHttpClient client = new OkHttpClient(); ClearableCookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context)); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new LoggingInterceptor()) .addInterceptor(new ResponseInterceptor()) .cookieJar(cookieJar) .build(); |

但是却不知道如何写import这个PersistentCookieJar:
【无法解决】Java的IntelliJ IDEA中如何导入PersistentCookieJar这个库
换用别的,普通java支持的库
java cookie lib
okhttp3 cookie lib
去试试:
1 | compile "com.squareup.okhttp3:okhttp-urlconnection:3.8.1" |

auto handle okhttp3 cookie
【未解决】Java给OkHttp加cookie出错:Cannot resolve symbol ‘setCookiePolicy’和Unknown class: ‘CookiePolicy.ACCEPT_ALL’
另外用:
1 2 3 4 5 6 7 | CookieJar cookieJar = new CookieJar(); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new LoggingInterceptor()) .addInterceptor(new ResponseInterceptor()) .cookieJar(cookieJar) / / .cookieJar(new JavaNetCookieJar(cookieManager)) .build(); |
结果:
‘CookieJar’ is abstract; cannot be instantiated
结果是Android的
java Cannot resolve symbol setCookiePolicy
好像是需要自己去实现,比如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CookieJar cookieJar = new CookieJar() { private final HashMap<String, List <Cookie>> cookieStore = new HashMap<>(); @Override public void saveFromResponse(HttpUrl url, List <Cookie> cookies) { cookieStore.put(url.host(), cookies); } @Override public List <Cookie> loadForRequest(HttpUrl url) { List <Cookie> cookies = cookieStore.get(url.host()); return cookies ! = null ? cookies : new ArrayList<Cookie>(); } }; OkHttpClient httpClient = new OkHttpClient.Builder() .cookieJar(cookieJar) .build(); |
好麻烦。
抽空参考:
【已解决】Java给OkHttp加cookie出错:Cannot resolve symbol setCookiePolicy和Unknown class CookiePolicy.ACCEPT_ALL
然后就去调试看看,多次访问不同页面,看看cookie是否有变化
然后确定java弄爬虫还是效率太低,还是去换Python弄吧:
【记录】Mac中用Python去模拟百度登陆