android發送http請求—-URLConnection、HttpURLConnection的使用


1. 使用 標准Java接口: 設計的類: java.net.*
基本步驟:
1) 創建 URL 以及 URLConnection / HttpURLConnection 對象
2) 設置連接參數
3) 連接到服務器
4) 向服務器寫數據
5)從服務器讀取數據

例:

try {
// 創建一個 URL 對象
URL url = new URL(your_url);

// 創建一個 URL 連接,如果有代理的話可以指定一個代理。
URLConnection connection = url.openConnection(Proxy_yours);
// 對於 HTTP 連接可以直接轉換成 HttpURLConnection,這樣就可以使用一些 HTTP 連接特定的方法,如 setRequestMethod() 等:
//HttpURLConnection connection =
// (HttpURLConnection)url.openConnection(Proxy_yours);

// 在開始和服務器連接之前,可能需要設置一些網絡參數
connection.setConnectTimeout(10000);

connection.addRequestProperty(“User-Agent”,
“J2me/MIDP2.0″);

// 連接到服務器
connection.connect();

// 與服務器交互:
OutputStream outStream = connection.getOutputStream();
ObjectOutputStream objOutput = new ObjectOutputStream(outStream);
objOutput.writeObject(new String(“this is a string…”));
objOutput.flush();
InputStream in = connection.getInputStream();
// 處理數據

} catch (Exception e) {
// 網絡讀寫操作往往會產生一些異常,所以在具體編寫網絡應用時
// 最好捕捉每一個具體以采取相應措施
}

2. 使用 apache 接口:

Apache HttpClient 是一個開源項目,彌補了 java.net.* 靈活性不足的缺點, 支持客戶端的HTTP編程.
使用的類包括:  org.apache.http.*

步驟:
1) 創建 HttpClient 以及 GetMethod / PostMethod, HttpRequest 等對象;
2) 設置連接參數;
3) 執行 HTTP 操作;
4) 處理服務器返回結果.

例:

try {
// 創建 HttpParams 以用來設置 HTTP 參數(這一部分不是必需的)
HttpParams params = new BasicHttpParams();

// 設置連接超時和 Socket 超時,以及 Socket 緩存大小:
HttpConnectionParams.setConnectionTimeout(params, 20 * 1000);
HttpConnectionParams.setSoTimeout(params, 20 * 1000);
HttpConnectionParams.setSocketBufferSize(params, 8192);
// 設置重定向,缺省為 true:
HttpClientParams.setRedirecting(params, true);
// 設置 user agent:
HttpProtocolParams.setUserAgent(params, userAgent);

// 創建一個 HttpClient 實例:
// 注意: HttpClient httpClient = new HttpClient(); 是Commons HttpClient中的用法,
// 在 Android 1.5 中我們需要使用 Apache 的缺省實現 DefaultHttpClient.
DefaultHttpClient httpClient = new DefaultHttpClient(params);

// 創建 HttpGet 方法,該方法會自動處理 URL 地址的重定向:
HttpGet httpGet = new HttpGet (“http://www.test_test.com/”);

//執行此方法:
HttpResponse response = client.execute(httpGet);

if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
// 錯誤處理,例如可以在該請求正常結束前將其中斷:
httpGet.abort();
}

// 讀取更多信息
Header[] headers = response.getHeaders();
HttpEntity entity = response.getEntity();
Header header = response.getFirstHeader(“Content-Type”);
} catch (Exception ee) {
//
} finally {
// 釋放連接:
client.getConnectionManager().shutdown();
}

以下例子以 HttpGet 方式通過代理訪問 HTTPS 網站:
try {
HttpClient httpClient = new HttpClient();

// 設置認證的數據: httpClient好像沒有方法getCredentialsProvider()??
httpClient.getCredentialsProvider().setCredentials(
new AuthScope(“your_auth_host”, 80, “your_realm”),
new UsernamePasswordCredentials(“username”, “password”));

// 設置服務器地址,端口,訪問協議:
HttpHost targetHost = new HttpHost(“www.verisign.com”, 443, “https”);

// 設置代理:
HttpHost proxy = new HttpHost(“192.168.1.1″, 80);
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

// 創建一個 HttpGet 實例:
HttpGet httpGet = new HttpGet(“/a/b/c”);

// 連接服務器並獲取應答數據:
HttpResponse response = httpClient.execute(targetHost, httpGet);

// 讀取應答數據:
int statusCode = response.getStatusLine().getStatusCode();
Header[] headers = response.getHeaders();
HttpEntity entity = response.getEntity();
//
} catch (Exception ee) {
//
}

3. 使用 android 接口:

類android.net.http.* 實際上是通過對 Apache 的 HttpClient 的封裝來實現的一個 HTTP 編程接口,同時還提供了 HTTP 請求隊列管理、以及 HTTP 連接池管理,以提高並發請求情況下(如轉載網頁時)的處理效率,除此之外還有網絡狀態監視等接口。

例:(class AndroidHttpClient : Since Android API level 8)

try {
AndroidHttpClient client =
AndroidHttpClient.newInstance(“user_agent__my_mobile_browser”);

// 創建 HttpGet 方法,該方法會自動處理 URL 地址的重定向:
HttpGet httpGet = new HttpGet (“http://www.test_test.com/”);
HttpResponse response = client.execute(httpGet);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
// 錯誤處理…
}
//

// 關閉連接:
client.close();
} catch (Exception ee) {
//
}




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM