2024年3月13日发(作者:)

第25讲 网络通信(2)—HttpClient

一、HttpClient

为了更好的处理向web站点的请求,包括处理Session、Cookie等细节问题,Apache开源组

织提供了一个HttpClient项目(HttpClient就是一个增强版本的HttpURLConnection),扩展

了HttpURLConnection的功能,Android将这个HttpClient所在的包集成了进来,较之

HttpURLConnection,采用HttpClient发送请求,接收响应更为简单。

例:修改上面的Android客户端程序,采用HttpClient来发送GET和POST请求。

先创建一个能将InputStream转换成一个字节数组的工具类:

public class StreamUtil {

public static byte[] convertStreamToByte(InputStream in){

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte [] buffer = new byte[1024];

int len =0;

try {

while((len=(buffer))!=-1){

(buffer,0,len);

}

byte [] result = Array();

return result;

} catch (IOException e) {

// TODO Auto-generated catch block

tackTrace();

}

return null;

}

}

(1) 发送GET请求

public int login_HttpClient_Get(String username ,String password){

String baseURL =

"192.168.101.62:8080/LoginDemoServer/servlet/LoginServlet";

String path = baseURL+"?username="+username+"&password="+password;

try {

的客户端

发送出去

HttpClient client = new DefaultHttpClient(); //创建一个浏览器

HttpGet httpGet = new HttpGet(path); //创建一个请求对象

HttpResponse httpResponse = e(httpGet); //将请求

if(tusLine().getStatusCode()==200){

Log.i("test", "网络连接成功,采用HttpClient的get请求");

//进一步判断,返回回来的字符串是

InputStream in =ity().getContent(); //

得到服务器响应的输入流

byte buffer[] = tStreamToByte(in);

String result = new String(buffer).trim(); //.trim()去掉字

符串前后空格换行等无用的字符

Log.i("test", result+"--------------");

if(("success"))

{

Log.i("test", "登陆成功");

return LOGINSUCCESS;

}

else{

Log.i("test", "用户名密码错误");

return LOGINFAILURE;

}

}

else{

//连接失败

Log.i("test", "网络连接失败");

return NETFAILURE;

}

} catch (Exception e) {

// TODO Auto-generated catch block

tackTrace();

}