怎么在Android中使用OkHttp进行重定向拦截处理

  介绍

今天就跟大家聊聊有关怎么在Android中使用OkHttp进行重定向拦截处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

步骤:

<李>

自己做帖子请求,并且不让它自动重定向

<李>

我们拿到后请求返回来的响应,获取对应的set - Cookie字段的内容

<李>

将该对应的内容添加到得到请求的饼干请求头字段中,然后做得到请求

<李>

获取到的得到请求的响应体就是我们登陆后的网页内容了,如果是静态网页可以通过Jsoup解析自己想要的信息了

我们需要通过抓包或者Chorme浏览器自带的请求查看功能来查看帖子请求提交的表单是怎样的.Chorme按F12即可

怎么在Android中使用OkHttp进行重定向拦截处理”> <br/> </p> <p>输入帐号密码点击登录即可</p> <p> <img src=

点击登陆后我们可以看的到,控制面板出现了一堆访问的记录,第一个就是我们要找的,第一个地位的标志是302302是重定向的意思。我们点击(pass.asp)这个请求,然后查看它的职务的请求头(点击头)。

怎么在Android中使用OkHttp进行重定向拦截处理

我们看到了一堆的set - Cookie字段,字段对应的内容就是我们要携带做得到请求的

怎么在Android中使用OkHttp进行重定向拦截处理

同时我们可以看到帖子提交的表单内容,有些网站的提交参数是经过加密的,如果要做通用的,我们需要找到它加密的方法,做同样的加密处理。

<强>接下来使用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进行重定向拦截处理