1. 程式人生 > >Android 通過httpclient請求web伺服器,並解決使用者登入session保持

Android 通過httpclient請求web伺服器,並解決使用者登入session保持

package com.rainet.tiis.network;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.util.Log;

/**
 * @project:					TIIS 
 * @Title: 						SimpleClient.java 		
 * @Package 					com.rainet.tiis.network		
 * @Description: 				HTTP請求factory
 * @author 						楊貴鬆   
 * @date 						2014-3-18 下午12:39:23 
 * @version 					V1.0
 */
public class SimpleClient {
	private static HttpParams httpParams;
	private static DefaultHttpClient httpClient;
	private static String JSESSIONID; //定義一個靜態的欄位,儲存sessionID

	/**
	 * @Title: 				getHttpClient 
	 * @author 				楊貴鬆
	 * @date 				2014-3-18 下午1:11:18
	 * @Description: 		獲取HttpClient
	 * @return
	 * @throws Exception 
	 * HttpClient 				返回
	 */
	public static HttpClient getHttpClient() throws Exception {
		// 建立 HttpParams 以用來設定 HTTP 引數(這一部分不是必需的)
		httpParams = new BasicHttpParams();
		// 設定連線超時和 Socket 超時,以及 Socket 快取大小
		HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);
		HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);
		HttpConnectionParams.setSocketBufferSize(httpParams, 8192);
		// 設定重定向,預設為 true
		HttpClientParams.setRedirecting(httpParams, true);
		// 設定 user agent
		String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2) Gecko/20100115 Firefox/3.6";
		HttpProtocolParams.setUserAgent(httpParams, userAgent);
		// 建立一個 HttpClient 例項
		// 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient
		// 中的用法,在 Android 1.5 中我們需要使用 Apache 的預設實現 DefaultHttpClient
		httpClient = new DefaultHttpClient(httpParams);
		return httpClient;
	}

	/**
	 * @Title: 				doGet 
	 * @author 				楊貴鬆
	 * @date 				2014-3-18 下午12:39:58
	 * @Description: 		doGet請求
	 * @param url
	 * @param params
	 * @return
	 * @throws Exception 
	 * String 				返回
	 */
	@SuppressWarnings("rawtypes")
	public static String doGet(String url, Map params) throws Exception {
		/* 建立HTTPGet物件 */
		String paramStr = "";
		if (params != null) {
			Iterator iter = params.entrySet().iterator();
			while (iter.hasNext()) {
				Map.Entry entry = (Map.Entry) iter.next();
				Object key = entry.getKey();
				Object val = entry.getValue();
				paramStr += paramStr = "&" + key + "=" + val;
			}
		}
		if (!paramStr.equals("")) {
			paramStr = paramStr.replaceFirst("&", "?");
			url += paramStr;
		}
		HttpGet httpRequest = new HttpGet(url);
		String strResult = "doGetError";
		/* 傳送請求並等待響應 */
		HttpResponse httpResponse = httpClient.execute(httpRequest);
		/* 若狀態碼為200 ok */
		if (httpResponse.getStatusLine().getStatusCode() == 200) {
			/* 讀返回資料 */
			strResult = EntityUtils.toString(httpResponse.getEntity());
		} else {
			strResult = "Error Response: " + httpResponse.getStatusLine().toString();
		}
		Log.v("strResult", strResult);
		return strResult;
	}

	/**
	 * @Title: 				doPost 
	 * @author 				楊貴鬆
	 * @date 				2014-3-18 下午12:39:38
	 * @Description: 		doPost請求
	 * @param url
	 * @param params
	 * @return
	 * @throws Exception 
	 * String 				返回
	 */
	public static String doPost(String url, List<NameValuePair> params) throws Exception {
		/* 建立HTTPPost物件 */
		HttpPost httpRequest = new HttpPost(url);
		String strResult = "doPostError";
		/* 新增請求引數到請求物件 */
		if (params != null && params.size() > 0) {
			httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
		}
		if(null != JSESSIONID){
			httpRequest.setHeader("Cookie", "JSESSIONID="+JSESSIONID);
		}
		/* 傳送請求並等待響應 */
		HttpResponse httpResponse = httpClient.execute(httpRequest);
		/* 若狀態碼為200 ok */
		if (httpResponse.getStatusLine().getStatusCode() == 200) {
			/* 讀返回資料 */
			strResult = EntityUtils.toString(httpResponse.getEntity());
			/* 獲取cookieStore */
			CookieStore cookieStore = httpClient.getCookieStore();
			List<Cookie> cookies = cookieStore.getCookies();
			for(int i=0;i<cookies.size();i++){
				if("JSESSIONID".equals(cookies.get(i).getName())){
					JSESSIONID = cookies.get(i).getValue();
					break;
				}
			}
		}
		Log.v("strResult", strResult);
		return strResult;
	}

}

相關推薦

Android 通過httpclient請求web伺服器解決使用者登入session保持

package com.rainet.tiis.network; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.http.HttpRes

怎樣在Win7系統中搭建Web伺服器在區域網中訪問

第一步:開啟控制面板 第二步:進入<程式> 第三步:開啟或關閉windows功能 第四步:點選展開Internet資訊服務,全部都選中 第五步:關閉防火牆,並開啟全球資訊網服務(http)

在linux下通過nfs搭建檔案伺服器實現掛載

今天做不成的事,明天也不會做好。 同學們,我們今天來學習在linux下搭建nfs檔案伺服器,並在linux和windows下進行掛載。最開始,專案的部署是和檔案放在一起的,後來,隨著訪問的人數增多,就需要把檔案單獨拿出來放到一個伺服器,這樣能

MFC 通過 http (post/get) 訪問WEB(介面)伺服器取得伺服器返回資料

關鍵系統函式 CHttpConnection* CInternetSession::GetHttpConnection CHttpFile* CHttpConnection::OpenRequest CHttpFile::SendRequest CIntern

CentOS搭建SVN伺服器通過Apache HTTP方式訪問(轉載至上品物語)

摘要:本文主要講述了在centos 6.5環境下搭建svn伺服器,可通過svn:\\IP方式訪問。同時由於部分公司內網埠限制,並不能訪問外網的svn伺服器,所以特地結合了apache伺服器,使得可以通過http方式http://IP方式訪問svn伺服器。 環境準備:

Linux(Red Hat6.5)下安裝svn伺服器通過http訪問

一、安裝        1、安裝svn,一般情況下選擇yum方式安裝比較簡單。 [[email protected] svn]# yum -y install mod_dav_svn #會自動安裝mod_dav_svn及其依賴包:mod_dav_svn-1.6.1

Android上傳檔案到Web伺服器PHP接收檔案(一)

      Android上傳檔案到伺服器,通常採用構造http協議的方法,模擬網頁POST方法傳輸檔案,伺服器端可以採用JavaServlet或者PHP來接收要傳輸的檔案。使用JavaServlet來接收檔案的方法比較常見,在這裡給大家介紹一個簡單的伺服器端使用PHP語言

mac下ssh連結遠端伺服器通過scp進行遠端複製省的ftp了

今天,本地的專案,需要往伺服器上傳,很簡單的東西,但是我確實不會。。。 windows下,一般可使用ftp上傳 linux上習慣了 rz&sz,直接yum安裝lrzsz。但是,mac的iterm不知道為什麼,即便是安裝上了,網上也根據教程,該了什麼上傳模式,還是不對

iOS實現通過SSH2協議連結Linux伺服器執行相關指令

使用方法: SSHWrapper* sshWrapper = [[SSHWrapper alloc] init]; NSError* error; [sshWrapper connectToHost:@"0.0.0.0" port:22 user:@"r

通過手機登陸到自己電腦上的web伺服器通過外網登陸到自己電腦上的網站

今天閒來無事,想通過自己的手機登入到自己電腦的伺服器。因此到網上去找了相關的知識。 1)通過電腦wifi連線連線web伺服器。       我在電腦上建了一個wifi用手機連線了這個wifi.在網路和共享中心找到了無線區域網ip地址:192.168.137.1。開啟web伺

基於httpd-2.2和httpd-2.4配置虛擬主機web站點提供https服務(一)

基於主機名的虛擬主機服務 使用httpd-2.2和httpd-2.4實現> 1.建立httpd服務,要求:> 1) 提供兩個基於名稱的虛擬主機www1, www2;要求每個虛擬主機都有單獨的錯誤日誌和訪問日誌; > 2) 通過www1的/server-status提供狀態信息,且僅允許172

基於httpd-2.2和httpd-2.4配置虛擬主機web站點提供https服務(二)

基於主機名配置虛擬主機web站點 使用httpd-2.2和httpd-2.4實現> 1.建立httpd服務,要求:> 1) 提供兩個基於名稱的虛擬主機www1, www2;要求每個虛擬主機都有單獨的錯誤日誌和訪問日誌; > 2) 通過www1的/server-status提供狀態信息,且僅允

基於httpd-2.4配置虛擬主機web站點提供https服務(二)

基於主機名配置虛擬主機web站點 為虛擬主機站點提供https服務 使用httpd-2.2和httpd-2.4實現> 1.建立httpd服務,要求:> 1) 提供兩個基於名稱的虛擬主機www1, www2;要求每個虛擬主機都有單獨的錯誤日誌和訪問日誌; > 2) 通過www1的/s

基於httpd-2.2配置虛擬主機web站點提供https服務(一)

基於主機名的虛擬主機配置 為虛擬主機提供https服務 使用httpd-2.2和httpd-2.4實現> 1.建立httpd服務,要求:> 1) 提供兩個基於名稱的虛擬主機www1, www2;要求每個虛擬主機都有單獨的錯誤日誌和訪問日誌; > 2) 通過www1的/server-

eNSP中的路由器通過遠程連接分析數據包

通過抓包分析路由器遠程連接1)先在華為模擬器上新建一個拓撲:2)分別在AR4和AR3上的GE 0/0/2上配置IP地址,並標識出對應的IP地址。配置IP的命令如下:system-view //進入系統視圖interface GigabitEthernet 0/0/2 //進入端口GE 0/0/2undo

Exchange2010清理不存在已下線的exchange伺服器重建系統仲裁郵箱

現有Exchange2010環境中存在已經下線的exchange,由於當時的系統管理員操作有誤,直接將BJ站點中的exchange伺服器關機,並未按照標準操作來清除,所以導致現有環境中仍存在BJ站點中新建的資料庫/副本,BJDAG,BJ exchange伺服器等殘留資訊。同時發現,exchange環境中系統、

有10臺linux web伺服器你該怎麼管理。你沒有上任交接工作你該怎麼展開自己工作

假如你跳槽到一家公司,有10臺linux  web伺服器,你該怎麼管理。你沒有上任交接工作,你該怎麼展開自己工作。 1. 搭建自己的監控伺服器zabbix 2. 找公司要賬號,密碼,ip 3. 檢視at和crontab記錄,建立自己備份機制 4. 遠端管理工具securiCRT或

Mac ssh連線遠端伺服器實現檔案的上傳和下載

使用scp命令實現上傳下載 1、從伺服器上下載檔案 scp [email protected]:/path/filename /Users/mac/Desktop(本地目錄) 例如:scp [email protected]:/root/test.txt /Users/mac/Desk

搭建主、從DNS伺服器實現智慧解析

1. 主、從DNS伺服器 主DNS伺服器:維護所負責解析的域的資料庫的伺服器;讀寫操作均可進行;主伺服器的資料會不斷髮生改變; 從DNS伺服器:從主DNS伺服器那裡或其它的從DNS伺服器那裡“複製”一份解析庫;但只能進行讀操作不能修改;從伺服器的資料庫要隨時同步主伺服器的資料; 2. 主、從

Android中呼叫攝像頭拍照儲存在相簿中選擇圖片顯示

我的配置是: android手機版本是7.0 android studio是3.1 android平臺是9.0 我的測試都是在真機上進行的。 首先來看程式碼: package com.example.sunshunli.cameraalbumtest; import a