Android 保持同一Session網路請求

  • 2019 年 11 月 12 日
  • 筆記

手機註冊獲取驗證碼的時候,總是說驗證碼過期,明明剛獲取的驗證碼,還是提示驗證碼過期。這種情況就是多次網路請求不在同一個Session,很可能就是用了不同的請求方法造成的(eg:httpUrlConnection和httpCilent的get請求或者post請求,建議這種情況就用同一種請求方法的post請求)

關於多次網路請求不在同一個Session(會話)的原因:每次請求的方法不同(例如:分別使用httpclient和httpUrlConnecttion等不同的網路請求方法)

使用HttpClient發送請求、接收響應很簡單,一般需要如下幾步即可。

  1. 創建HttpClient對象。
  2. 創建請求方法的實例,並指定請求URL。如果需要發送GET請求,創建HttpGet對象;如果需要發送POST請求,創建HttpPost對象。
  3. 如果需要發送請求參數,可調用HttpGet、HttpPost共同的setParams(HetpParams params)方法來添加請求參數;對於HttpPost對象而言,也可調用setEntity(HttpEntity entity)方法來設置請求參數。
  4. 調用HttpClient對象的execute(HttpUriRequest request)發送請求,該方法返回一個HttpResponse。
  5. 調用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取伺服器的響應頭;調用HttpResponse的getEntity()方法可獲取HttpEntity對象,該對象包裝了伺服器的響應內容。程式可通過該對象獲取伺服器的響應內容。
  6. 釋放連接。無論執行方法是否成功,都必須釋放連接

簡單封裝post請求

public static String httpPost(final String url,                         final List<NameValuePair> list_params) {     try {        // 得到HttpPost對象        HttpPost httpPost = new HttpPost(url);        httpPost.setEntity(new UrlEncodedFormEntity(list_params,              HTTP.UTF_8));        // 客戶端使用POST方式執行請求,獲得伺服器端的回應response        HttpResponse respone = httpClient.execute(httpPost);        // 判斷是否請求成功        if (respone.getStatusLine().getStatusCode() == 200) {           // 獲取輸入流           InputStream inStream = respone.getEntity().getContent();           int len;           byte b[] = new byte[1024];           ByteArrayOutputStream bos = new ByteArrayOutputStream();           while ((len = inStream.read(b)) != -1) {              bos.write(b, 0, len);           }           str = bos.toString();        }     } catch (UnsupportedEncodingException e) {        e.printStackTrace();     } catch (ClientProtocolException e) {        e.printStackTrace();     } catch (IOException e) {        e.printStackTrace();     }     return str;  }

調用

List<NameValuePair> list_params = new ArrayList<NameValuePair>();  list_params.add(new BasicNameValuePair("uname", "xiaomeng"));  list_params.add(new BasicNameValuePair("loginPassword", "123456"));  String response = HttpUtils.httpPost(url, list_params);