1. 程式人生 > >Android中的HTTP請求

Android中的HTTP請求

在Android上傳送HTTP請求的方式一般有兩種,HttpURLConnection和HttpClient。

1、HttpURLConnection:
首先需要獲取HttpURLConnection的例項,一般只需要new一個URL物件並傳入目標的網路地址,讓背後呼叫openConnection()方法即可:

URL url=new URL("http://www.baidu.com");
HttpURLConnection conn=(HttpURLConnection)url.openConnection();

設定HTTP請求使用的方法,常用的方法主要有兩個:GET和POST。

conn.setRequestMethod("GET");

設定連線超時毫秒數

conn.setConnectionTimeout(5000);

設定讀取超時毫秒數

conn.setReadTimeout(5000);

之後呼叫getInputStream()方法就可以獲取到伺服器返回的輸入流了

InputStream in=conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuffer stringBuffer = new StringBuffer();
String
line; while ((line = reader.readLine()) != null) { stringBuffer.append(line); } Log.d("TAG",stringBuffer.toString());

關閉HTTP連線

conn.disconnect();

如果是想提交資料給伺服器,之需要將HTTP請求的方法改為POST,並在獲取輸入流之前把要提交的資料寫出即可,注意每條資料都要以鍵值對的形式存在,資料與資料之間用&符號隔開:

conn.setRequestMethod("POST");
DataOutputStream out
=new DataOutputStream(conn.getOutputStream()); out.writeBytes("username=admin&password=123456");

2、HttpClient
HttpClient可以完成和HttpURLConnection幾乎一模一樣的功能,但兩者的用法卻有較大的差別。
HttpClient是一個介面,因此無法建立它的例項,通常情況下會建立一個DefaultHttpClient的例項:

HttpClient httpClient=new DefaultHttpClient();

如果想要發起一條GET請求,可以建立一個HttpGet物件,並傳入目標的網路地址,然後呼叫HttpClient的execute()方法即可:

HttpGet httpGet=new HttpGet("http://www.taobao.com");
HttpResponse httpResponse=httpClient.execute(httpGet);

如果是POST請求,胡比GET請求稍微複雜一點,我們需要建立一個HttpPost物件,並傳入目標的網路地址:

HttpPOST httpPost=new HttpPost("http://www.taobao.com");

然後通過一個NameValuePair集合存放待提交的引數,並將這個引數集合傳入到一個UrlEncodedFormEntity中,然後呼叫HttpPost的setEntity()方法將構建好的UrlEncodedFormEntity傳入:

List<NameValuePair> params=new ArrayList<NameValuePair>();
params.add(new NameValuePair("username","admin"));
params.add(new NameValuePair("password","123456"));
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(params,"utf-8");
httpPost.setEntity(entity);

接下來的操作和HttpGet一樣了,呼叫HttpClient的execute()方法,並將HttpPost物件傳入即可:

HttpResponse httpResponse=httpClient.execute(httpPost);

執行excute()方法後會返回一個HttpResponse物件,伺服器返回的資訊就會包含在裡面,通常情況下,我們都會先去除伺服器返回的狀態碼,如果等於200就說明請求和相應都成功了。

if(httpResponse.getStatusLine().getStatusCode()==200){
    //請求和相應都成功了
}

接下來在這個if判斷的內部取出伺服器的具體內容,可以呼叫getEntity()方法獲得到一個HttpEntity例項,然後再呼叫EntityUtils.toString()方法將HttpEntity轉換成字串即可:

HttpEntity entity=httpResponse.getEntity();
String response=EntityUtils.toString(entity);

如果返回的資料中帶有中文,需要指定字元編碼集為utf-8,否則會出現亂碼:

String str=EntityUtils.toString(entity,"utf-8");