Ⅰ 如何使用HttpClient
直接上實例吧。
Apache官網下載 HttpClient , 下不了的點擊這里,下載完後解壓取lib文件夾中jar包導入到項目中
在進行本例之前需要了解三個類
HttpClient 代表Http客戶端 裡面定義了很多http 請求執行行為
HttpEntity 消息載體,發送或者接收消息的載體,可以通過客戶端請求或者伺服器響應獲取實例
HttpConnection 代表http連接
本次實例代碼
public class HttpCLientDemo
{
// HttpClient 代表Http客戶端
// HttpEntity 消息載體,發送或者接收消息的載體,可以通過客戶端請求或者伺服器響應獲取實例
// HttpConnection 代表http連接
/**
* @param args
*/
public static void main(String[] args)
{
// 創建默認的客戶端實例
HttpClient httpCLient = new DefaultHttpClient();
// 創建get請求實例
HttpGet httpget = new HttpGet("http://www..com");
System.out.println("executing request "+httpget.getURI());
try
{
// 客戶端執行get請求 返回響應實體
HttpResponse response = httpCLient.execute(httpget);
// 伺服器響應狀態行
System.out.println(response.getStatusLine());
Header[] heads = response.getAllHeaders();
// 列印所有響應頭
for(Header h:heads){
System.out.println(h.getName()+":"+h.getValue());
}
// 獲取響應消息實體
HttpEntity entity = response.getEntity();
System.out.println("------------------------------------");
if(entity != null){
//響應內容
System.out.println(EntityUtils.toString(entity));
System.out.println("----------------------------------------");
// 響應內容長度
System.out.println("響應內容長度:"+entity.getContentLength());
}
} catch (ClientProtocolException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}finally{
httpCLient.getConnectionManager().shutdown();
}
}
}
Ⅱ 如何使用HttpClient
1.伺服器認證(Server Authentication)
HttpClient處理伺服器認證幾乎是透明的,僅需要開發人員提供登錄信息(login credentials)。登錄信息保存在HttpState類的實例中,可以通過 setCredentials(String realm, Credentials cred)和getCredentials(String realm)來獲取或設置。
HttpClient內建的自動認證,可以通過HttpMethod類的setDoAuthentication(boolean doAuthentication)方法關閉,而且這次關閉隻影響HttpMethod當前的實例。
2.代理認證(proxy authentication)
除了登錄信息需單獨存放以外,代理認證與伺服器認證幾乎一致。用 setProxyCredentials(String realm, Credentials cred)和 getProxyCredentials(String realm)設、取登錄信息。
3.認證方案(authentication schemes)
是HTTP中規定最早的也是最兼容的方案,遺憾的是也是最不安全的一個方案,因為它以明碼傳送用戶名和密碼。它要求一個UsernamePasswordCredentials實例,可以指定伺服器端的訪問空間或採用默認的登錄信息。
Ⅲ 如何使用HttpClient
這里只介紹如何使用HttpClient發起GET或者POST請求
GET 方式
Java代碼
//先將參數放入List,再對參數進行URL編碼
List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "中國"));
params.add(new BasicNameValuePair("param2", "value2"));
//對參數編碼
String param = URLEncodedUtils.format(params, "UTF-8");
//baseUrl
//將URL與參數拼接
HttpGet getMethod = new HttpGet(baseUrl + "?" + param);
try {
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取伺服器響應內容
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
POST方式
Java代碼
//和GET方式一樣,先將參數放入List
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));
params.add(new BasicNameValuePair("param2", "第二個參數"));
try {
HttpPost postMethod = new HttpPost(baseUrl);
postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數填入POST Entity中
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Ⅳ 如何使用HttpClient
Commons-httpclient項目就是專門設計來簡化HTTP客戶端與伺服器進行各種通訊編程。通過它可以讓原來很頭疼的事情現在輕松的解決,例如你不再管是HTTP或者HTTPS的通訊方式,告訴它你想使用HTTPS方式,剩下的事情交給httpclient替你完成。本文會針對我們在編寫HTTP客戶端程序時經常碰到的幾個問題進行分別介紹如何使用httpclient來解決它們,為了讓讀者更快的熟悉這個項目我們最開始先給出一個簡單的例子來讀取一個網頁的內容,然後循序漸進解決掉前進中的所有問題。
1. 讀取網頁(HTTP/HTTPS)內容
下面是我們給出的一個簡單的例子用來訪問某個頁面
*
* Created on 2003-12-14 by skydong
*/
package http.demo;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
/** *//**
* 最簡單的HTTP客戶端,用來演示通過GET或者POST方式訪問某個頁面
* @author skydong
*/
public class SimpleClient ...{
public static void main(String[] args) throws IOException
...{
HttpClient client = new HttpClient();
//設置代理伺服器地址和埠
//client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);
//使用GET方法,如果伺服器需要通過HTTPS連接,那隻需要將下面URL中的http換成https
HttpMethod method = new GetMethod("http://java.sun.com";);
//使用POST方法
//HttpMethod method = new PostMethod("http://java.sun.com";);
client.executeMethod(method);
//列印伺服器返回的狀態
System.out.println(method.getStatusLine());
//列印返回的信息
System.out.println(method.getResponseBodyAsString());
//釋放連接
method.releaseConnection();
}
}
在這個例子中首先創建一個HTTP客戶端(HttpClient)的實例,然後選擇提交的方法是GET或者POST,最後在HttpClient實例上執行提交的方法,最後從所選擇的提交方法中讀取伺服器反饋回來的結果。這就是使用HttpClient的基本流程。其實用一行代碼也就可以搞定整個請求的過程,非常的簡單!
2. 以GET或者POST方式向網頁提交參數
其實前面一個最簡單的示例中我們已經介紹了如何使用GET或者POST方式來請求一個頁面,本小節與之不同的是多了提交時設定頁面所需的參數,我們知道如果是GET的請求方式,那麼所有參數都直接放到頁面的URL後面用問號與頁面地址隔開,每個參數用&隔開,例如:http://java.sun.com?name=liudong&mobile=123456,但是當使用POST方法時就會稍微有一點點麻煩。本小節的例子演示向如何查詢手機號碼所在的城市,代碼如下:
*
* Created on 2009-7-9 by skydong
*/
package http.demo;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
/** *//**
* 提交參數演示
* 該程序連接到一個用於查詢手機號碼所屬地的頁面
* 以便查詢號碼段1330227所在的省份以及城市
* @author skydong
*/
public class SimpleHttpClient ...{
public static void main(String[] args) throws IOException
...{
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost("www.imobile.com.cn", 80, "http");
HttpMethod method = getPostMethod();//使用POST方式提交數據
client.executeMethod(method);
//列印伺服器返回的狀態
System.out.println(method.getStatusLine());
//列印結果頁面
String response = new String(method.getResponseBodyAsString().getBytes("8859_1"));
//列印返回的信息
System.out.println(response);
method.releaseConnection();
}
/** *//**
* 使用GET方式提交數據
* @return
*/
private static HttpMethod getGetMethod()...{
return new GetMethod("/simcard.php?simcard=1330227");
}
/** *//**
* 使用POST方式提交數據
* @return
*/
private static HttpMethod getPostMethod()...{
PostMethod post = new PostMethod("/simcard.php");
NameValuePair simcard = new NameValuePair("simcard","1330227");
post.setRequestBody(new NameValuePair[] ...{ simcard});
return post;
}
}
在上面的例子中頁面http://www.imobile.com.cn/simcard.php需要一個參數是simcard,這個參數值為手機號碼段,即手機號碼的前七位,伺服器會返回提交的手機號碼對應的省份、城市以及其他詳細信息。GET的提交方法只需要在URL後加入參數信息,而POST則需要通過NameValuePair類來設置參數名稱和它所對應的值
3. 處理頁面重定向
在JSP/Servlet編程中response.sendRedirect方法就是使用HTTP協議中的重定向機制。它與JSP中的的區別在於後者是在伺服器中實現頁面的跳轉,也就是說應用容器載入了所要跳轉的頁面的內容並返回給客戶端;而前者是返回一個狀態碼,這些狀態碼的可能值見下表,然後客戶端讀取需要跳轉到的頁面的URL並重新載入新的頁面。就是這樣一個過程,所以我們編程的時候就要通過HttpMethod.getStatusCode()方法判斷返回值是否為下表中的某個值來判斷是否需要跳轉。如果已經確認需要進行頁面跳轉了,那麼可以通過讀取HTTP頭中的location屬性來獲取新的地址。
狀態碼
對應HttpServletResponse的常量
詳細描述
301
SC_MOVED_PERMANENTLY
頁面已經永久移到另外一個新地址
302
SC_MOVED_TEMPORARILY
頁面暫時移動到另外一個新的地址
303
SC_SEE_OTHER
客戶端請求的地址必須通過另外的URL來訪問
307
SC_TEMPORARY_REDIRECT
同SC_MOVED_TEMPORARILY
下面的代碼片段演示如何處理頁面的重定向
client.executeMethod(post);
System.out.println(post.getStatusLine().toString());
post.releaseConnection();
//檢查是否重定向
int statuscode = post.getStatusCode();
if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) ||
(statuscode == HttpStatus.SC_MOVED_PERMANENTLY) ||
(statuscode == HttpStatus.SC_SEE_OTHER) ||
(statuscode == HttpStatus.SC_TEMPORARY_REDIRECT))
...{//讀取新的URL地址
Header header = post.getResponseHeader("location");
if (header != null) ...{
String newuri = header.getValue();
if ((newuri == null) || (newuri.equals("")))
newuri = "/";
GetMethod redirect = new GetMethod(newuri);
client.executeMethod(redirect);
System.out.println("Redirect:"+ redirect.getStatusLine().toString());
redirect.releaseConnection();
} else ...{
System.out.println("Invalid redirect");
}
我們可以自行編寫兩個JSP頁面,其中一個頁面用response.sendRedirect方法重定向到另外一個頁面用來測試上面的例子。
本小節應該說是HTTP客戶端編程中最常碰見的問題,很多網站的內容都只是對注冊用戶可見的,這種情況下就必須要求使用正確的用戶名和口令登錄成功後,方可瀏覽到想要的頁面。因為HTTP協議是無狀態的,也就是連接的有效期只限於當前請求,請求內容結束後連接就關閉了。在這種情況下為了保存用戶的登錄信息必須使用到Cookie機制。以JSP/Servlet為例,當瀏覽器請求一個JSP或者是Servlet的頁面時,應用伺服器會返回一個參數,名為jsessionid(因不同應用伺服器而異),值是一個較長的唯一字元串的Cookie,這個字元串值也就是當前訪問該站點的會話標識。瀏覽器在每訪問該站點的其他頁面時候都要帶上jsessionid這樣的Cookie信息,應用伺服器根據讀取這個會話標識來獲取對應的會話信息。
對於需要用戶登錄的網站,一般在用戶登錄成功後會將用戶資料保存在伺服器的會話中,這樣當訪問到其他的頁面時候,應用伺服器根據瀏覽器送上的Cookie中讀取當前請求對應的會話標識以獲得對應的會話信息,然後就可以判斷用戶資料是否存在於會話信息中,如果存在則允許訪問頁面,否則跳轉到登錄頁面中要求用戶輸入帳號和口令進行登錄。這就是一般使用JSP開發網站在處理用戶登錄的比較通用的方法。
這樣一來,對於HTTP的客戶端來講,如果要訪問一個受保護的頁面時就必須模擬瀏覽器所做的工作,首先就是請求登錄頁面,然後讀取Cookie值;再次請求登錄頁面並加入登錄頁所需的每個參數;最後就是請求最終所需的頁面。當然在除第一次請求外其他的請求都需要附帶上Cookie信息以便伺服器能判斷當前請求是否已經通過驗證。說了這么多,可是如果你使用httpclient的話,你甚至連一行代碼都無需增加,你只需要先傳遞登錄信息執行登錄過程,然後直接訪問想要的頁面,跟訪問一個普通的頁面沒有任何區別,因為類HttpClient已經幫你做了所有該做的事情了,太棒了!下面的例子實現了這樣一個訪問的過程
*
* Created on 2009-7-9 by skydong
*/
package http.demo;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.*;
import org.apache.commons.httpclient.methods.*;
/** *//**
* 用來演示登錄表單的示例
* @author skydong
*/
public class FormLoginDemo ...{
static final String LOGON_SITE = "localhost";
static final int LOGON_PORT = 8080;
public static void main(String[] args) throws Exception...{
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);
//模擬登錄頁面login.jsp->main.jsp
PostMethod post = new PostMethod("/main.jsp");
NameValuePair name = new NameValuePair("name", "ld");
NameValuePair pass = new NameValuePair("password", "ld");
post.setRequestBody(new NameValuePair[]...{name,pass});
int status = client.executeMethod(post);
System.out.println(post.getResponseBodyAsString());
post.releaseConnection();
//查看cookie信息
CookieSpec cookiespec = CookiePolicy.getDefaultSpec();
Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, "/", false, client.getState().getCookies());
if (cookies.length == 0) ...{
System.out.println("None");
} else ...{
for (int i = 0; i < cookies.length; i++) ...{
System.out.println(cookies[i].toString());
}
}
//訪問所需的頁面main2.jsp
GetMethod get = new GetMethod("/main2.jsp");
client.executeMethod(get);
System.out.println(get.getResponseBodyAsString());
get.releaseConnection();
}
}
Ⅳ 如何使用HttpClient
一、簡介
HttpClient是Apache Jakarta
Common下的子項目,用來提供高效的、最新的、功能豐富的支持HTTP協議的客戶端編程工具包,並且它支持HTTP協議最新的版本和建議。
HttpClient已經應用在很多的項目中,比如Apache
Jakarta上很著名的另外兩個開源項目Cactus和HTMLUnit都使用了HttpClient。
下載地址:
http://hc.apache.org/downloads.cgi
二、特性
1. 基於標准、純凈的java語言。實現了Http1.0和Http1.1
2. 以可擴展的面向對象的結構實現了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
3. 支持HTTPS協議。
4. 通過Http代理建立透明的連接。
5. 利用CONNECT方法通過Http代理建立隧道的https連接。
6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos認證方案。
7. 插件式的自定義認證方案。
8. 便攜可靠的套接字工廠使它更容易的使用第三方解決方案。
9. 連接管理器支持多線程應用。支持設置最大連接數,同時支持設置每個主機的最大連接數,發現並關閉過期的連接。
10. 自動處理Set-Cookie中的Cookie。
11. 插件式的自定義Cookie策略。
12. Request的輸出流可以避免流中內容直接緩沖到socket伺服器。
13. Response的輸入流可以有效的從socket伺服器直接讀取相應內容。
14. 在http1.0和http1.1中利用KeepAlive保持持久連接。
15. 直接獲取伺服器發送的response code和 headers。
16. 設置連接超時的能力。
17. 實驗性的支持http1.1 response caching。
18. 源代碼基於Apache License 可免費獲取。
三、使用方法
使用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. 釋放連接。無論執行方法是否成功,都必須釋放連接
Ⅵ 如何使用HttpClient
HttpClient:是一個介面
首先需要先創建一個DefaultHttpClient的實例
HttpClient httpClient=new DefaultHttpClient();
發送GET請求:
先創建一個HttpGet對象,傳入目標的網路地址,然後調用HttpClient的execute()方法即可:
HttpGet HttpGet=new HttpGet(「http://www..com」);
httpClient.execute(httpGet);
發送POST請求:
創建一個HttpPost對象,傳入目標的網路地址:
HttpPost httpPost=new HttpPost(「http://www..com」);
通過一個NameValuePair集合來存放待提交的參數,並將這個參數集合傳入到一個UrlEncodedFormEntity中,然後調用HttpPost的setEntity()方法將構建好的UrlEncodedFormEntity傳入:
List<NameValuePair>params=newArrayList<NameValuePair>();
Params.add(new BasicNameValuePair(「username」,」admin」));
Params.add(new BasicNameValuePair(「password」,」123456」));
UrlEncodedFormEntity entity=newUrlEncodedFormEntity(params,」utf-8」);
httpPost.setEntity(entity);
調用HttpClient的execute()方法,並將HttpPost對象傳入即可:
HttpClient.execute(HttpPost);
執行execute()方法之後會返回一個HttpResponse對象,伺服器所返回的所有信息就保護在HttpResponse裡面.
先取出伺服器返回的狀態碼,如果等於200就說明請求和響應都成功了:
If(httpResponse.getStatusLine().getStatusCode()==200){
//請求和響應都成功了
HttpEntityentity=HttpResponse.getEntity();//調用getEntity()方法獲取到一個HttpEntity實例
Stringresponse=EntityUtils.toString(entity,」utf-8」);//用EntityUtils.toString()這個靜態方法將HttpEntity轉換成字元串,防止伺服器返回的數據帶有中文,所以在轉換的時候將字元集指定成utf-8就可以了
}
Ⅶ 如何使用HttpClient
這里舉幾個應用。
1. 讀取網頁(HTTP/HTTPS)內容
下面是我們給出的一個簡單的例子用來訪問某個頁面
*
* Created on 2003-12-14 by skydong
*/
package http.demo;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
/** *//**
* 最簡單的HTTP客戶端,用來演示通過GET或者POST方式訪問某個頁面
* @author skydong
*/
public class SimpleClient ...{
public static void main(String[] args) throws IOException
...{
HttpClient client = new HttpClient();
//設置代理伺服器地址和埠
//client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);
//使用GET方法,如果伺服器需要通過HTTPS連接,那隻需要將下面URL中的http換成https
HttpMethod method = new GetMethod("http://java.sun.com";);
Ⅷ 如何使用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. 釋放連接。無論執行方法是否成功,都必須釋放連接
Ⅸ 如何使用HttpClient
Http協議的重要性相信不用我多說了,HttpClient相比傳統JDK自帶的URLConnection,增加了易用性和靈活性(具體區別,日後我們再討論),它不僅是客戶端發送Http請求變得容易,而且也方便了開發人員測試介面(基於Http協議的),即提高了開發的效率,也方便提高代碼的健壯性。因此熟練掌握HttpClient是很重要的必修內容,掌握HttpClient後,相信對於Http協議的了解會更加深入。
一、簡介
HttpClient是Apache Jakarta Common下的子項目,用來提供高效的、最新的、功能豐富的支持HTTP協議的客戶端編程工具包,並且它支持HTTP協議最新的版本和建議。HttpClient已經應用在很多的項目中,比如Apache Jakarta上很著名的另外兩個開源項目Cactus和HTMLUnit都使用了HttpClient。
下載地址: http://hc.apache.org/downloads.cgi
二、特性
1. 基於標准、純凈的java語言。實現了Http1.0和Http1.1
2. 以可擴展的面向對象的結構實現了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
3. 支持HTTPS協議。
4. 通過Http代理建立透明的連接。
5. 利用CONNECT方法通過Http代理建立隧道的https連接。
6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos認證方案。
7. 插件式的自定義認證方案。
8. 便攜可靠的套接字工廠使它更容易的使用第三方解決方案。
9. 連接管理器支持多線程應用。支持設置最大連接數,同時支持設置每個主機的最大連接數,發現並關閉過期的連接。
10. 自動處理Set-Cookie中的Cookie。
11. 插件式的自定義Cookie策略。
12. Request的輸出流可以避免流中內容直接緩沖到socket伺服器。
13. Response的輸入流可以有效的從socket伺服器直接讀取相應內容。
14. 在http1.0和http1.1中利用KeepAlive保持持久連接。
15. 直接獲取伺服器發送的response code和 headers。
16. 設置連接超時的能力。
17. 實驗性的支持http1.1 response caching。
18. 源代碼基於Apache License 可免費獲取。
三、使用方法
使用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. 釋放連接。無論執行方法是否成功,都必須釋放連接
四、實例
[java] view plain 在CODE上查看代碼片派生到我的代碼片
本實例是採用HttpClient4.3最新版本。該版本與之前的代碼寫法風格相差較大,大家多留意下。
Ⅹ 如何使用HttpClient
這里只介紹如何使用HttpClient發起GET或者POST請求
GET 方式
Java代碼
//先將參數放入List,再對參數進行URL編碼
List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "中國"));
params.add(new BasicNameValuePair("param2", "value2"));
//對參數編碼
String param = URLEncodedUtils.format(params, "UTF-8");
//baseUrl
String baseUrl = "http://ubs.free4lab.com/php/method.php";
//將URL與參數拼接
HttpGet getMethod = new HttpGet(baseUrl + "?" + param);
HttpClient httpClient = new DefaultHttpClient();
try {
HttpResponse response = httpClient.execute(getMethod); //發起GET請求
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取伺服器響應內容
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
POST方式
Java代碼
//和GET方式一樣,先將參數放入List
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));
params.add(new BasicNameValuePair("param2", "第二個參數"));
try {
HttpPost postMethod = new HttpPost(baseUrl);
postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數填入POST Entity中
HttpResponse response = httpClient.execute(postMethod); //執行POST方法
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}