okhttp添加自定义cookie
package cn.x.request; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import okhttp3.Call;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response; public abstract class BaseRequest {
String url;
String requestMethod;
OkHttpClient okHttpClient ;
RequestBody body ;
Request request;
Call call;
Response response; public BaseRequest() {
final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
this.okHttpClient = new OkHttpClient.Builder()
.cookieJar(new CookieJar() {
@Override
public void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {
cookieStore.put(httpUrl.host(), list);
} @Override
public List<Cookie> loadForRequest(HttpUrl httpUrl) {
List<Cookie> cookies = cookieStore.get(httpUrl.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
})
.build();
} public abstract void prepareRequest() throws Throwable;
public abstract Response excuteRequest() throws Throwable; public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} public String getRequestMethod() {
return requestMethod;
} public void setRequestMethod(String requestMethod) {
this.requestMethod = requestMethod;
} public OkHttpClient getOkHttpClient() {
return okHttpClient;
} public void setOkHttpClient(OkHttpClient okHttpClient) {
this.okHttpClient = okHttpClient;
} public RequestBody getBody() {
return body;
} public void setBody(RequestBody body) {
this.body = body;
} public Request getRequest() {
return request;
} public void setRequest(Request request) {
this.request = request;
} public Call getCall() {
return call;
} public void setCall(Call call) {
this.call = call;
} public Response getResponse() {
return response;
} public void setResponse(Response response) {
this.response = response;
} }
package cn.x.request; import java.util.List; import cn.x.common.AppHeader;
import okhttp3.Cookie;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response; public class JsonRequest extends BaseRequest {
String jsonString;
String accessToken; public JsonRequest(String url ,String jsonString) {
super();
this.url = url;
this.jsonString = jsonString; } @Override
public void prepareRequest() throws Throwable {
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
AppHeader appHeader = new AppHeader(jsonString);
body = RequestBody.create(JSON, jsonString);
request = new Request.Builder()
.url(url)
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36")
.addHeader("SIGN",appHeader.getSign())
.addHeader("T",appHeader.getTimespan())
.post(body)
.build();
if( null != accessToken) {
List<Cookie> cookieList = okHttpClient.cookieJar().loadForRequest(HttpUrl.get(url));
Cookie cookie = new Cookie.Builder().name("accessToken").value(accessToken).domain(HttpUrl.get(url).host()).build();
cookieList.add(cookie);
okHttpClient.cookieJar().saveFromResponse(HttpUrl.get(url), cookieList);
}
} @Override
public Response excuteRequest() throws Throwable {
System.out.println();
if(request.header("Authorization") != null) {
System.out.println("Authorization: " + request.header("Authorization"));
}
System.out.println("url:" + url);
System.out.println("request:" + jsonString);
call = okHttpClient.newCall(request);
response = call.execute();
System.out.println("response:" + response.toString());
return response;
} public String getJsonString() {
return jsonString;
} public void setJsonString(String jsonString) {
this.jsonString = jsonString;
} public String getAccessToken() {
return accessToken;
} public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
} }
okhttp添加自定义cookie的更多相关文章
- 使用OKHttp模拟登陆知乎,兼谈OKHttp中Cookie的使用!
本文主要是想和大家探讨技术,让大家学会Cookie的使用,切勿做违法之事! 很多Android初学者在刚开始学习的时候,或多或少都想自己搞个应用出来,把自己学的十八般武艺全都用在这个APP上,其实这个 ...
- Android OkHttp的Cookie自己主动化管理
Android中在使用OkHttp这个库的时候.有时候须要持久化Cookie,那么怎么实现呢.OkHttp的内部源代码过于复杂,不进行深究.这里仅仅看当中的HttpEngineer里面的部分源代码,在 ...
- 【转】python requests库添加自定义cookie的方法
requests库是个很方便的爬虫,相关文档已经很详细了.不过我今天在爬网页时,有一个网站是在脚本中添加cookie的,但我向requests.cookies里添加cookie费了不少周折.尝试了多个 ...
- OkHttp与Cookie及Cookie的持久化
http://blog.csdn.net/u011150924/article/details/52780931 http://blog.csdn.net/chen19960724/article/d ...
- [Network] okhttp3与旧版本okhttp的区别分析
cp from : https://www.jianshu.com/p/4a8c94b239b4 1.包名改变 包名改了由之前的 com.squareup.http.改为 okhttp3. 我们需要将 ...
- Selenium WebDriver- 操作浏览器的cookie
#encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...
- Cookie、Session、Token那点事儿
1.什么是Cookie? Cookie 技术产生源于 HTTP 协议在互联网上的急速发展.随着互联网时代的策马奔腾,带宽等限制不存在了,人们需要更复杂的互联网交互活动,就必须同服务器保持活动状态(简称 ...
- Cookie、Session、Token那点事儿和前后端分离之JWT用户认证
(两篇文章转自:https://www.jianshu.com/p/bd1be47a16c1:https://www.jianshu.com/p/180a870a308a) 什么是Cookie? Co ...
- Android 网络请求框架Retrofit
Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp ...
随机推荐
- 51nod 1503 猪和回文(dp滚存)
题面 大意:在一个n*m的矩形中从(1,1)走到(n,m)而且走过的路径是一条回文串,统计方案数 sol:我们考虑从(1,1)和(n,m)两端开始算,这样就只要保证每次经过的字符一样就可以满足回文了, ...
- django--orm表自关联详解
什么是表内自关联 表内自关联是指表内数据相关联的对象和表是相同字段,这样我们就直接用表内关联将外键关联设置成自身表的字段.同样表内关联也分一对多字段和多对多字段 例如:对于微博评论,每条评论都可能有子 ...
- 通过JPA注解获取某个类的主键字段
public String getPkColumn(String className) { String pkColumn = null; try { Class clazz = Class.forN ...
- windoows ftp的自动上传bat
@echo off set P=%cd% #获取脚本当前文件路径 del /f /s /q %P%\tmp.txt set Y=%DATE:~0,4% #获取年 set M=%DATE:~5,2% # ...
- Dividing POJ - 1014 多重背包二进制优化
多重背包模型 写的时候漏了一个等号找了半天 i<<=1 !!!!!! #include<iostream> #include<cstdio> #include&l ...
- CH0805 防线(算竞进阶习题)
二分 一道藏的很深的二分题... 题目保证只有一个点有奇数个防具,这个是突破口. 因为 奇数+偶数=偶数,我们假设某个点x,如果有奇数点的防具在x的左边,那么x的左边的防具总数一定是奇数,右边就是偶数 ...
- King of Destruction HDU - 3002 && HDU - 3691(全局最小割)
求无向图的最小割 有没有源点都一样,不影响 #include <iostream> #include <cstdio> #include <sstream> #in ...
- IDEA 简单的正则匹配
IDEA在进行查看或替换的时候,勾选Regex 选项就可以进行正则匹配查找了 几个简单实用的正则: 以什么开头,以什么结尾的字符串 以aa开头,以bb结尾的字符串aa.*bb 从开头到某个字符串为止的 ...
- Concurrent usage detected
同一个公司里,使用studio 同时进行开发,而且账号还是同一个,会出现这种问题 也有说封掉8732端口就可以解决这个问题的,但是我尝试的是不行的 一直以来用的一个笨的但是有效的办法是:启动studi ...
- [NOI2010]超级钢琴(RMQ+堆)
小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中Ai可正可负 ...