okHttp的簡單運用以及cookie操作,302重定向死迴圈
為了完成學期實訓,需要對新浪新聞網站進行讀取,所以學習並封裝了okhttp簡單get和post的工具類。
本文參考了以下兩篇文章:
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html
http://blog.csdn.net/lmj623565791/article/details/47911083
如果需要詳細的okhttp使用,建議看泡網的教程,需要完善的工具庫,請看我鴻洋大神的文章。
鴻洋大神的封裝太過完善- -很多東西app並用不到。。。
本著不能拿來主義,以及實用定製為主的精神,決定自行學習okhttp的使用。
關於專案中使用時發現的問題:
1.okhttp官方建議只使用一個client,但是對於訪問不同網站時cookie混亂,需要自行設定header來區分不同會話。
2.有些網站的登入驗證並不會返回網頁,直接在cookie中生成id區分是否登入成功,並且會造成302重定位死迴圈。
解決辦法當然是禁止自動跳轉,百度各種無解然後翻api發現了這個:mOkHttpClient.setFollowRedirects(followRedirects);
以上就是具體問題和解決,下面放出工具類:
使用方法:可以直接進行ui操作package com.toxicant.hua.okhttpdemo; import android.os.Handler; import android.os.Looper; import com.squareup.okhttp.Call; import com.squareup.okhttp.Callback; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.RequestBody; import com.squareup.okhttp.Response; import java.io.IOException; /** * okhttp的get和post非同步的封裝 * Created by hua on 2015/12/15. */ public class OkhttpUitls { private OkHttpClient mOkHttpClient=new OkHttpClient(); private static OkhttpUitls mInstance=null; private String cookie="";//跨站點操作時需要對自行對不同cookie進行儲存,訪問時設定cookie以延續會話 //獲取UI執行緒 private Handler mHandler= new Handler(Looper.getMainLooper()); //回撥介面 interface MOkCallBack{ void onSuccess(String str); void onError(); } //獲取例項 public static OkhttpUitls getInstance() { if (mInstance == null) { synchronized (OkhttpUitls.class) { if (mInstance == null) { mInstance = new OkhttpUitls(); } } } return mInstance; } /** * get方式進行網路訪問 * @param url 地址 * @param mCallBack 回撥 */ public void get(String url, final MOkCallBack mCallBack){ final Request request = new Request.Builder() .url(url) .header("cookie", cookie) .build(); Call call = mOkHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { mHandler.post(new Runnable() { @Override public void run() { mCallBack.onError(); } }); } @Override public void onResponse(final Response response) throws IOException { cookie=response.header("set-cookie"); final String re=response.body().string(); mHandler.post(new Runnable() { public void run() { mCallBack.onSuccess(re); } }); } }); }//get /** * post方式進行網路訪問 * @param url 地址 * @param data 回撥 * @param mCallBack 介面 */ public void post(String url,RequestBody data,final MOkCallBack mCallBack){ final Request request = new Request.Builder() .url(url) .header("cookie", cookie) .post(data) .build(); Call call = mOkHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { mHandler.post(new Runnable() { @Override public void run() { mCallBack.onError(); } }); } @Override public void onResponse(final Response response) throws IOException { cookie=response.header("set-cookie"); final String re=response.body().string(); mHandler.post(new Runnable() { public void run() { mCallBack.onSuccess(re); } }); } }); }//post /** * 獲取當前使用的cookie * @return cookie */ public String getCookie() { return cookie; } /** * 設定下次訪問網路的cookie,設定為""空文字則清除cookie * @param cookie 要設定的cookie */ public void setCookie(String cookie) { this.cookie = cookie; } /** * 設定要不要自動跟隨302重定向,預設為真 * @param followRedirects 是否自動跳轉 */ public void setFollowRedirects(boolean followRedirects) { mOkHttpClient.setFollowRedirects(followRedirects); } }
post方法比get多了一個data引數uitls.get("http://www.baidu.com",new OkhttpUitls.MOkCallBack() { @Override public void onSuccess(String str) { tv.setText(str); Log.i("cookie","cookie->"+uitls.getCookie()); } @Override public void onError() { tv.setText("error"); } });
RequestBody data=new FormEncodingBuilder()
.add("name", "android")
.add("psw", "123456")
.build();
如上構造鍵值對,然後傳入就行。
在上傳json資料時,data引數應該這樣封裝:
final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody data = RequestBody.create(JSON, json);
最後附上okhttp的git專案原地址
https://github.com/square/okhttp
相關推薦
okHttp的簡單運用以及cookie操作,302重定向死迴圈
為了完成學期實訓,需要對新浪新聞網站進行讀取,所以學習並封裝了okhttp簡單get和post的工具類。 本文參考了以下兩篇文章: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.ht
oauth X-Frame-Options 跳轉授權頁面時,302重定向禁用iframe
授權 ngx auth option rest pairs 測試 authorize iframe 因為oauth/authorize響應頭包含X-Frame-Options: DENY解決方案:openresty nginx 移除該屬性,經測試生效 more_clear
shell指令碼實現簡單的模擬使用者操作,未加檢查點。
計次失敗:counter+1,輸出的一直是times==0 shell指令碼: echo about eyelock counter=0 am start --activity-single-top -n com.android.settings/com.android.s
Python爬蟲請求頭、請求代理以及cookie操作
·爬蟲程式urllib2模組底層操作; ·請求頭的設定和新增; ·請求代理的種類和型別; ·關於cookie的操作(手動新增/程式自動獲取) 一、爬蟲底層操作和請求頭的設定 1.demo01_爬蟲底層操作 雖然urllib2模組是爬蟲的底層操作,但並不是程式的底層
OkHttp簡單封裝以及快取設定
廢話不說,上程式碼:package com.jiyun.kaishu.Model;import android.content.Context;import android.util.Log;import java.io.File;import java.io.IOExcep
java中httpclent以post方式提交請求時,http返回碼是302重定向時,不自動跳轉的處理
場景: 介面A:請求地址為http://www.test.com/test 介面A的功能,會把接收到的引數url寫入到header的Location屬性中 在java中,使用httpclient傳送請求, 在以get方式傳送請求時,http的返回碼是200,自動處理了重定
關於爬蟲模擬美團登陸後,解決302重定向的問題的方法
在使用requests中的方法模擬登陸,沒有用scrapy中本來的方法。 self.session.get(self.get_url, data=post_data, headers=self.headers) 登陸之後去請求下一個連結的時候,就會出現下面的錯誤 scr
jsp reuest轉發,response重定向 以及pageContext對forward和include的簡寫
response.sendRedirect("apage.jsp");//servlet重定向到apage.jsp request.getRequestDispatcher("apage.jsp").forward(request, response);//servlet
關於vue-router,路由重定向的使用分析
log mage bsp 但是 完美解決 outer 方法 解決 問題 看之前的項目,突然發現一個不算bugd的bug,之前也是一直沒有想到,現在發現之後越來越覺得有必要改掉, 如圖,項目用的是vue做的,自然切換用的就是路由,一級路由包括:首頁、記錄和個人中心,二級路由
改變querystring值,然後重定向
red chang system rep exchange repl bject tar object 原文發布時間為:2009-11-13 —— 來源於本人的百度文章 [由搬家工具導入] 本页面改变qu
302重定向、喜馬音樂
param chrom curl sde serve track os.chdir () 內存耗盡 # 重定向: def redirect(url): r = requests.get(url,params={‘chrome‘:‘utf-8‘, ‘q‘:‘666
LAMP架構(apache用戶認證,域名重定向,apache訪問日誌)
apache用戶認證 域名重定向 apache訪問日誌 一、apache用戶認證用戶認證就是打開一個網站。會讓你輸入用戶名和密碼。對了才會讓你訪問HTTP,vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf編輯內容如下<Director
微信小程序開發--路由切換,頁面重定向
code gate 詳細 rec 遇到 request tabbar 絕對路徑 api 這段時間開發了一個微信小程序,雖然小程序的導航API 官方文檔寫得很詳細,但是在具體開發過程中還是會遇到很多不明白,或者一時轉不過彎的地方。 1、頁面切換傳參,參數讀取 1.1
scrapy 解決302重定向問題
stat lba hand edi scrapy pytho sta art true def start_requests(self): for i in self.start_urls: yield Request(i,
關於ios 11.X後微信wifi認證,無法打開微信,無法重定向到weixin:開頭網址等問題的處理
width 問題 aos 開頭 優化 重定向 bubuko gin indexof 環境: 認證路由ROS ,認證後臺python django ios11系統 更新以來先後出現微信wifi認證,無法打開微信,無法重定向到weixin:開頭網址等相關問題。 經
Python requests jira登入302重定向
總結一下自己在用Python requests庫對jira進行的一個bug統計時,在登入遇到的問題,以前也遇到過登入302重定向的問題,那個時候用requests同樣的方法沒有獲取到cookie,但是jira可以用requests獲取到cookie,我也不知道怎麼回事 網上百度了很多資料,好多都是用jira
關於ios 11.X後微信wifi認證,無法開啟微信,無法重定向到weixin:開頭網址等問題的處理
環境: 認證路由ROS ,認證後臺python django ios11系統 更新以來先後出現微信wifi認證,無法開啟微信,無法重定向到weixin:開頭網址等相關問題。 經過問題的收集,查詢到網路上此類問題普遍存在 收集到的有如下網址,市面上大多數廠商在使用
WDCP配置ThinkPHP偽靜態隱藏index.php,解決重定向次數過多
修改檔案專案入口檔案 # 把tp50專案public目錄所有檔案複製到public_html,修改index.php入口檔案路徑,所有的..修改為當前目錄/ 配置nginx配置 # 在wdcp裡面,檔案管理>nginx配置(檔案: /www/w
Linux(小專案)————shell的實現,包含重定向、內建命令。
bash原理: 通過上面bash的原理我們可以,瞭解到shell的框架與流程: 1.等待使用者輸入命令。 2.解析使用者輸入的字串。 3.建立子程序執行exec程式替換 4.父程序等待子程序退出。 迴圈執行1~4步驟,即可完成my_shell。 最簡單版本的my_shell實現:
使用Kong的oauth2.0,請求重定向url,返回“no route and no API found with those values”
官方提供的endpoints有兩個:/oauth2/authorize 以及 /oauth2/token。(詳情請看:https://docs.konghq.com/hub/kong-inc/oauth2/) 注意事項有以下3點: 1、如果api添加了“uris”,比如“/test",那麼訪問的