okhttp3带cookie请求
Request经常都要携带Cookie,上面说过request创建时可以通过header设置参数,Cookie也是参数之一。就像下面这样:
- Request request = new Request.Builder()
- .url(url)
- .header("Cookie", "xxx")
- .build();
然后可以从返回的response里得到新的Cookie,你可能得想办法把Cookie保存起来。
但是OkHttp可以不用我们管理Cookie,自动携带,保存和更新Cookie。
方法是在创建OkHttpClient设置管理Cookie的CookieJar
- private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
- OkHttpClient 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();
这样以后发送Request都不用管Cookie这个参数也不用去response获取新Cookie什么的了。还能通过cookieStore获取当前保存的Cookie。
服务器使用shiro做登录校验及权限验证的时候,app端访问时就要带上cookie,不然请求会提示未登录
- private void postAsynHttp() {
- mOkHttpClient=new OkHttpClient.Builder()
- .cookieJar(new CookieJar() {
- private final HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();
- @Override
- public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
- cookieStore.put(url, cookies);
- cookieStore.put(HttpUrl.parse("http://192.168.31.231:8080/shiro-2"), cookies);
- for(Cookie cookie:cookies){
- System.out.println("cookie Name:"+cookie.name());
- System.out.println("cookie Path:"+cookie.path());
- }
- }
- @Override
- public List<Cookie> loadForRequest(HttpUrl url) {
- List<Cookie> cookies = cookieStore.get(HttpUrl.parse("http://192.168.31.231:8080/shiro-2"));
- if(cookies==null){
- System.out.println("没加载到cookie");
- }
- return cookies != null ? cookies : new ArrayList<Cookie>();
- }
- })
- .build();
- RequestBody formBody = new FormBody.Builder()
- .add("username", "admin")
- .add("password", "admin")
- .build();
- final Request request = new Request.Builder()
- .url("http://192.168.31.231:8080/shiro-2/shiro-login")
- .post(formBody)
- .build();
- Call call = mOkHttpClient.newCall(request);
- call.enqueue(new Callback() {
- @Override
- public void onFailure(Call call, IOException e) {
- }
- @Override
- public void onResponse(Call call, Response response) throws IOException {
- String str = response.body().string();
- Log.i("wangshu", str);
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- showProgress(false);
- Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();
- }
- });
- }
- });
- }
okhttp3带cookie请求的更多相关文章
- 带cookie请求数据
经常会用到一些采集网上的资源,普通网站很好采,get_file_contents()/c_url(). 有的网站会有登陆后才能采集,需要带cookie请求获取(登陆网站相同方法),下面记录一下使用方法 ...
- 利用postman进行接口测试并发送带cookie请求的方法
做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...
- HTTPClient实现免登陆请求(带cookie请求)
背景: 使用httpClient请求某登录型网站,模拟一个操作,一般步骤一个httpclient模式登录->httpClient模拟操作: 此时发现,每次操作都需要进行一次登录,极其浪费时间,是 ...
- WPF带cookie get/post请求网页,下载文件,图片,可保持会话状态
直接写成啦一个MyNet.cs类方便使用 get/post方法请求 //get请求 MyNet.SendRequest("http://www.baidu.com"); //pos ...
- 爬虫学习(八)——带cookie的网页进行爬取
# 前提:# # 通常,很多网站需要登录才能进行浏览,所以在爬取这些网站时,也需要进行登录,并拿取登录时的cookie# # 登录网页,服务器会给客户端一个牌子cookie# # 访问登录页面时,带着 ...
- postman发送带cookie的http请求
1:需求:测试接口的访问权限,对于某些接口A可以访问,B不能访问. 2:问题:对于get请求很简单,登录之后,直接使用浏览器访问就可以: 对于post请求的怎么测试呢?前提是需要登录态,才能访问接口. ...
- postman 请求带cookie
以亚马逊为例,我抓包随便看一个返回是json数据格式的一个接口,比如随便点一个,我的订单 随便找一条,然后复制url过滤 右键,copy下url 将url放入filter过滤: 在postman里面, ...
- urllib2 post请求方式,带cookie,添加请求头
#encoding = utf-8 import urllib2import urllib url = 'http://httpbin.org/post'data={"name": ...
- PostMan 使用Interceptor 发送带cookie的请求一直loading
问题 最近要写一个爬虫(虽然是第一次写),于是就用了Chrome上非常方便一个插件,PostMan,但是由于chrome安全的限制,发不出带cookie和带有自定义头部标签的请求. 百度一番后得如果想 ...
随机推荐
- ajax--底层代码
ajax:Asynchronous JavaScript And XML,异步的js与XML.ajax并不是一种新的编程语言,而是一种使用现有标准的新方法.ajax能够在不重载整个网页的情况下与服务器 ...
- github的本地配置和项目创建
之前完成了github的安装和账号的注册,接下来要进行项目的创建和本地代码仓库的建立 1.创建项目 2.填写项目相关信息 注意:在给项目起名时,尽量起一些有意义的名字,否则会被管理员删除.因为服务器上 ...
- android Service 学习总结
学习android开发已经四五个月,由于项目中职责的原因一直没有接触过Service的实际项目,今天重新学一遍Service用法. 问题: 作为四大组件,为什么需要Service? 它与Thread又 ...
- Android Studio启动速度慢的问题。
Android Studio每次启动都要去fetching sdk,由于Android sdk 官网在大陆连不上,所以每次启动时界面都会停在那里很久. 要提高启动速度,就要避免每次启动Android ...
- Struts 2初体验
Struts2简介: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数 ...
- 为android游戏开发-准备的地图编辑器-初步刷地图
采用多文理混合,单页面支持8张文理进行刷绘
- Golang gRPC 和 gRPC-gateway 结合使用
一.安装 go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway go get -u github.com/g ...
- my97datePicker的相信使用
http://www.my97.net/dp/demo/resource/2.1.asp
- UUID生成随机数工具类
package com.qiyuan.util; import java.util.UUID; public class RanNum { /** * 生成随机数<br> * GUID: ...
- APP消息推送机制的实现(PUSH)
出于好奇,想了解一下消息推送机制,在网上搜索到了几篇文章,感觉还不错,粘贴下来,等真正用到的时候再仔细研究 以下两篇是关于ios的 1.http://blog.csdn.net/xyxjn/artic ...