使用Volley獲取多個cookie

2021-07-04 09:22:33 字數 3407 閱讀 1425

最近接手了乙個論壇性質的應用,因為流量小,網路請求頻繁,所以選擇使用volley進行重構。因為預設volley只是讀取乙個cookie,而這個專案使用了4個cookie,所以使用者登入部分先使用原來的httpclient來儲存使用者的登入cookie資訊。

重構獲取和傳送內容部分重構基本能夠順利完成,只剩下cookie這個難題,網上找了很多資料,發現很多都是片面一講,其實說的不對。

有時伺服器會返回多個 set-cookie 值,而volley預設只取第乙個,如果有需求,就要自己修改volley的**啦,hurlstack(sdk_int>9會走這裡)裡面的performrequest,預設解析header方式如下,多個值的話只需要拿到header.getvalue().get(1)等等,具體需求可以自行修改。

header h = new basicheader(header.getkey(), header.getvalue().get(0));

response.addheader(h);

上面是網上搜到的方法,其實只是說了第一步,後面還有需要注意的地方。但是解決問題的思路是對的:

1. 重寫或者是繼承乙個hurlstack,在方法performrequest()中把cookie新增到response。

2. 定義乙個model包含請求返回的內容和cookie list。

3. 重寫乙個返回物件是上面我們model的request,在request的parsenetworkresponse方法中,把獲取到的cookie放到model裡面。

這裡需要額外注意一點,也是上面方法沒有說明的一點:

在我們的hurlstackperformrequest返回的是乙個httpresponse(header是乙個list),我們的cookie也是新增到了它的headers裡面。到目前還沒有問題。但是此處返回的response還要經過乙個轉化,因為request類的protected abstract responseparsenetworkresponse(networkresponse paramnetworkresponse);引數為乙個networkresponse,這個的headers是乙個map,所以這就要求我們的多個cookie的key不能都為set-cookie。因為上面的**中cookie的header.getkey()一般是set-cookie

下面是部分原始碼:

}關鍵**:

//使用正規表示式從reponse的頭中提取cookie內容的子串

使用requests測試介面時獲取cookie

cookie的獲取import requests url resp requests.get url cookie的返回與字典行為類似,但不是字典 通過requests自帶工具完成cookie的獲取和字典化 cookie requests.utils.dict from cookiejar resp...

Volley使用小結

因為現在的專案中一直是使用soap訪問webservice,感覺沒有直接post請求爽,所以研究了post訪問webservice,之後有研究了volley框架,所以記下來。activity裡宣告 private requestqueue mrequestqueue volley.newreques...

Volley 快捷使用

只需傳入相應的引數,指定返回結果的型別,就能得到相應的bean。下面詳細看看裡面的內容,先來看myhttprequest 登入介面 public void loginrequest context context,string phone,string verifycode,zyhttphandle...