HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。android的sdk中已经附带了HttpClient,下面我们来看一下,如何使用HttpClient发起GET和POST请求:
GET请求:
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
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.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.DefaultClientConnection;
import org.apache.http.message.BasicNameValuePair;
import java.io.*;
import java.util.*;
public class HttpClientTest
{
public static String GetDemo()
{
String url = "http://localhost/test/test.php?username=test&password=test";
HttpClient httpClient = new DefaultHttpClient();
//此句类似于打开一个浏览器,HttpClient是接口类型
HttpGet httpGet = new HttpGet(url);
try{
HttpResponse response = httpClient.execute(httpGet);
//得到状态码
int code = response.getStatusLine().getStatusCode();
if(code == 200){
//得到一个输入流
InputStream is = response.getEntity().getContent();
BufferedReader bfr = new BufferedReader(new InputStreamReader(is));//使用BufferdReader读取数据
String line = null;
StringBuilder sb = new StringBuilder();
while((line=bfr.readLine())!=null){
sb.append(line);
}
if(sb==null){
return null;
}else{
return sb.toString();
}
}else {
return null;
}
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException("请求失败!");
return null;
}
}
}
POST请求:
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
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.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.DefaultClientConnection;
import org.apache.http.message.BasicNameValuePair;
import java.io.*;
import java.util.*;
public class HttpClientTest
{
public static String PostDemo()
{
String url = "http:/localhost/android/login.php";
HttpClient httpClient = new DefaultHttpClient();
HttpPost hPost = new HttpPost(url);
//设置数据实体
List
parameters = new ArrayList
();
//NameValuePair是一个接口类型,它的实现类BasicNameValuePair
parameters.add(new BasicNameValuePair("username",username));
parameters.add(new BasicNameValuePair("password",password));
UrlEncodedFormEntity entity;
try {
entity = new UrlEncodedFormEntity(parameters, "utf-8");
//指定要提交的数据实体,并设置编码格式
hPost.setEntity(entity);
HttpResponse response = httpClient.execute(hPost);//执行post请求
int code = response.getStatusLine().getStatusCode();
if(code==200){
//得到输入流
InputStream is = response.getEntity().getContent();
BufferedReader bfr = new BufferedReader(new InputStreamReader(is));
String line = null;
StringBuilder sb = new StringBuilder();
while((line=bfr.readLine())!=null){
sb.append(line);
}
if(sb==null){
return null;
}else{
return sb.toString();
}
}else{
return null;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}