介绍
今天就跟大家聊聊有关怎么在Android中使用OkHttp进行重定向拦截处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
步骤:
- <李>
自己做帖子请求,并且不让它自动重定向
李> <李>我们拿到后请求返回来的响应,获取对应的set - Cookie字段的内容
李> <李>将该对应的内容添加到得到请求的饼干请求头字段中,然后做得到请求
李> <李>获取到的得到请求的响应体就是我们登陆后的网页内容了,如果是静态网页可以通过Jsoup解析自己想要的信息了
李>我们需要通过抓包或者Chorme浏览器自带的请求查看功能来查看帖子请求提交的表单是怎样的.Chorme按F12即可
点击登陆后我们可以看的到,控制面板出现了一堆访问的记录,第一个就是我们要找的,第一个地位的标志是302302是重定向的意思。我们点击(pass.asp)这个请求,然后查看它的职务的请求头(点击头)。
我们看到了一堆的set - Cookie字段,字段对应的内容就是我们要携带做得到请求的
同时我们可以看到帖子提交的表单内容,有些网站的提交参数是经过加密的,如果要做通用的,我们需要找到它加密的方法,做同样的加密处理。
<强>接下来使用OkHttp进行操作强>
由于OkHttp提供了自动携带饼干进行请求的功能,于是我们可以很方便地进行处理了。
final OkHttpClient client =, new OkHttpClient () .newBuilder () ,,,,,,,.followRedirects (false),//禁制OkHttp的重定向操作,我们自己处理重定向 ,,,,,,,.followSslRedirects(假) ,,,,,,,.cookieJar (new LocalCookieJar()),,//为OkHttp设置自动携带饼干的功能 ,,,,,,,.build ();//CookieJar是用于保存饼干的 class LocalCookieJar  implements CookieJar { List<才能;Cookie>,饼干; @Override才能 public 才能;List< Cookie>, loadForRequest (HttpUrl arg0), { ,,,,if (cookies !=, null) ,,,,,,,return 饼干; ,,,,,return new ArrayList(); ,,} @Override才能 public 才能;void  saveFromResponse (HttpUrl arg0, List ,饼干),{ ,,,this.cookies =,饼干; ,,} ,, }
为什么设置CookieJar就能自动携带饼干了呢?给你看一段OkHttp的源码就知道了。
/* * *,才能Populates request with defaults 以及饼干。 ,* *,才能& lt; p>却;能够client 并# 39;t specify a default {@code 接受},header because it 并# 39;t 知道什么 *,才能content types 从而application is 兴趣;在。 ,*/,private Request  networkRequest (Request 请求),throws IOException { Request.Builder 才能;result =, request.newBuilder ();//才能如果CookieJar的饼干不为空,则设置饼干字段 List<才能;Cookie>, cookies =, client.cookieJar () .loadForRequest (request.url ()); if 才能;(! cookies.isEmpty ()), { ,,result.header (“Cookie",, cookieHeader(饼干)); ,,} return 才能result.build (); 以前,}>于是接下来我们就是做后请求了
final OkHttpClient client =, new OkHttpClient () .newBuilder () ,,,,,,,.followRedirects(假) ,,,,,,,.followSslRedirects(假) ,,,,,,,.cookieJar (new LocalCookieJar ()) ,,,,,,,.build (); ,,,//构造一个帖子请求 ,,,RequestBody body =, new FormBody.Builder阀门()(“UserStyle",,“student") ,,,,,,,阀门(“user",,“xxx")阀门(“password",,“xxx") .build (); ,,,,,,, ,,,Request Request =, new Request.Builder () .url (“http://222.195.8.201/pass.asp") . post(身体).build (); ,,,, ,,,client.newCall(请求).enqueue (new 回调(),{ ,,,,, ,,,,@Override ,,,,,public void onResponse (Call 调用,Response 响应),throws IOException { ,,,,,,,/* * ,,,,,,,,*,如果不用CookieJar,那么就要自己去解析返回的set - cookie字段,解析之后通过addHeader (“Cookie",,饼干) ,,,,,,,,*,添加饼干请求头 null null null null null null null null null null null null null null null null null null null null null null怎么在Android中使用OkHttp进行重定向拦截处理