您的位置:首页 > 理论基础 > 计算机网络

HttpClient的用法总结

2013-08-17 01:50 465 查看
使用HttpClient连接服务端的步骤:

[align=left]1.创建HttpClient客户端对象[/align]
[align=left]HttpClient client = new DefaultHttpClient();[/align]
[align=left]2.创建请求对象[/align]
[align=left] 1.1 GET请求[/align]
[align=left]HttpUriRequest request = new HttpGet(String uri)[/align]
[align=left] HttpUriRequest request = new HttpGet(URI uri)[/align]
[align=left] 1.2 POST请求[/align]
[align=left] 1.2.1 创建Post方法的请求对象[/align]
[align=left] HttpUriRequest request = new HttpPost()[/align]
[align=left] HttpUriRequest request = new HttpPost(String uri)[/align]
[align=left] HttpUriRequest request = new HttpPost(URI uri)[/align]
[align=left] 1.2.2 创建请求参数的List集合[/align]
[align=left] List<NameValuePair> pairs = new ArrayList<NameValuePair>();[/align]
[align=left] pairs.add(new BasicNameValuePair(“name” , “value”));[/align]
[align=left] ...[/align]
[align=left] 1.2.3 使用请求参数List集合创建并设置请求实体[/align]
[align=left] UrlEncodedFormEntity requestEntity = new UrlEncodedFormEntity(pairs);[/align]
[align=left] (HttpPost)request.setEntity(requsetEntity); //setEntity是HttpPost特有的方法[/align]
[align=left]3.客户端执行响应[/align]
[align=left] HttpResponse response = client.execute(request);[/align]
[align=left]4.获取并判断响应码,获取响应实体对象[/align]
[align=left] if(response.getStatusLine().getStatusCode == HttpStatus.SC_OK){[/align]
[align=left] HttpEntity responseEntity = response.getEntity();[/align]
[align=left] }[/align]
[align=left]5.解析响应实体对象[/align]
[align=left] InputStream is = entity.getContent(); //获取内容读取流[/align]
[align=left] EntityUtils.toByteArray(entity); //转换成字节数组[/align]
[align=left] EntityUtils.toString(entity); //转换成字符串[/align]
[align=left] EntityUtils.toString(entity,"utf-8"); //使用相应编码转换成字符串[/align]
开发中的模式

[align=left]public class HttpUtils{[/align]
[align=left] [/align]
[align=left] //设置请求类型常量[/align]
[align=left] public static final int METHOD_GET = 1;[/align]
[align=left] public static final int METHOD _POST = 2;[/align]
[align=left] /*[/align]
[align=left] *创建方法获取响应实体[/align]
[align=left] *需要知道的参数有三个[/align]
[align=left] *URI 带有文件名称的整个网络地址[/align]
[align=left] *List<NameValuePair> 带有参数的键值对[/align]
[align=left] *int 访问的方法,如果是1,代表GET方法;如果是2,代表POST方法[/align]
[align=left] */[/align]
[align=left] public HttpEntity getEntity(String uri , List<NameValuePair> params , int method) [/align]
[align=left]throws Exception{[/align]
[align=left] //创建HttpEntity的引用[/align]
[align=left] HttpEntity responseEntity = null;[/align]
[align=left] //创建客户端对象[/align]
[align=left] HttpClient client = new DefaultHttpClient();[/align]
[align=left] //创建请求对象[/align]
[align=left] HttpUriRquest request = null;[/align]
[align=left] //判断方法时GET还是POST,并且创建请求对象[/align]
[align=left] switch(method){[/align]
[align=left] case 1:[/align]
[align=left] StringBuilder sb = new StringBuilder(uri);[/align]
[align=left] //循环加入请求参数[/align]
[align=left] if(params != null && !params.isEmpty()){[/align]
[align=left] sb.append(“?”);[/align]
[align=left] for(NameValuePair pair : pairs){[/align]
[align=left] sb.append(pair.getName());[/align]
[align=left] sb.append(“=”);[/align]
[align=left] sb.append(pair.getValue());[/align]
[align=left] sb.append(“&”);[/align]
[align=left]}[/align]
[align=left]sb.deleteCharAt(sb.lenght()-1);[/align]
[align=left]}[/align]
[align=left]request = new HttpGet(sb.toString());[/align]
[align=left]break;[/align]
[align=left] case 2:[/align]
[align=left] request = HttpPost(uri);[/align]
[align=left] if(params != null && !params.isEmpty()){[/align]
[align=left] //创建请求实体[/align]
[align=left] UrlEncodedFormEntity requestEntity = new UtlEncodedFormEntity(params);[/align]
[align=left] ((HttpPost)request).setEntity(requestEntity);[/align]
[align=left] }[/align]
[align=left] break;[/align]
[align=left]}[/align]
[align=left]//执行请求,获取相应对象[/align]
[align=left]HttpResponse response = client.execute(request);[/align]
[align=left]//获取响应实体[/align]
[align=left]if(response.getStatusLine().getStatusCode() == 200){[/align]
[align=left]responseEntity = response.getEntity();[/align]
[align=left]}[/align]
[align=left]return responseEntity;[/align]
[align=left]}[/align]
[align=left]}[/align]
HttpClient中常用到的类

[align=left]HttpClient[/align]
[align=left] |-- DefaultHttpClient[/align]
[align=left] 构造方法: DefaultHttpClient[/align]
[align=left] 主要方法: HttpResponse execute(HttpUriRequest request)[/align]
[align=left]HttpUriRequest[/align]
[align=left] |-- HttpGet[/align]
[align=left] 构造方法: HttpGet()[/align]
[align=left] HttpGet(String uri)[/align]
[align=left] |-- HttpPost[/align]
[align=left] 构造方法: HttpPost(String uri)[/align]
[align=left] 主要方法: void setEntity(HttpEntity entity)[/align]
[align=left]HttpResponse[/align]
[align=left] 主要方法:[/align]
[align=left] StatusLine getStatusLine()[/align]
[align=left] Header[] getAllHeaders();[/align]
[align=left] HttpEntity getEntity();[/align]
[align=left]HttpEntity[/align]
[align=left] 主要方法:[/align]
[align=left] InputStream getContent();[/align]
[align=left] long getContentLength();[/align]
[align=left] Header getContentType();[/align]
[align=left] |-- UrlEncodedFormEntity[/align]
[align=left] 构造方法:UrlEncodedFormEntity(List<? extends NameValuePair> params)[/align]
[align=left] //用于向请求对象中写入请求实体(包含请求参数(NameValuePair))[/align]
[align=left]EntityUtils[/align]
[align=left] public static byte[] toByteArray(HttpEntity entity)[/align]
[align=left] public static String toString(HttpEntity entity)[/align]
[align=left] public static String toString(HttpEntity entity , String encoding)[/align]
[align=left]StatusLine[/align]
[align=left] int getStatusCode()[/align]
[align=left]HttpStatus[/align]
[align=left] SC_OK SC_NOT_FOUND[/align]
[align=left]Header[/align]
[align=left] String getName()[/align]
[align=left] String getValue()[/align]
[align=left]NameValuePair[/align]
[align=left] String getName()[/align]
[align=left] String getValue()[/align]
[align=left] |-- BasicNameValuePair[/align]
[align=left] 构造方法:BasicNameValuePair(String name , String value)[/align]
快速记忆(POST)

[align=left]1. 要想连接网络,肯定需要一个客户端对象,所以首先创建一个客户端对象HttpClient[/align]
[align=left]2. 拥有客户端对象之后肯定需要对互联网进行访问,首先要对互联网进行请求,所以要创建一个请求对象HttpUriRequest,因为是Post请求,所以使用HttpPost[/align]
[align=left]3. 我们知道请求对象包含请求行(方法、路径、协议),消息头,请求实体三部分。通过new HttpPost(uri)可以设置请求行的路径,现在需要设置请求实体中的请求参数。[/align]
[align=left]我们知道请求参数一定是由请求参数的名称和请求参数的值组成。这时就需要一个类NameValuePair,这是一个键值对,在初始化的时候为了简便直接使用其子类BaseNameValuePair(String name , String value)。[/align]
[align=left]如果有多组请求参数就要使用List集合List<NameValuePair>[/align]
[align=left]4. 已经有一个存放参数的键值对的集合只有,就可以创建一个请求实体对象,并且将参数集合传进去—new UrlDecodedFormEntity(List<NameValuePair>)[/align]
[align=left]5. 然后设置请求对象的请求实体[/align]
[align=left]request.setEntity(new UrlDecodedFormEntity(List<NameValuePair>))[/align]
[align=left]6. 现在不管是要访问的网络地址还是参数就都已经放入请求对象中了,现在就可以利用客户端进行请求—将请求对象发送出去,并且获得响应对象[/align]
[align=left]响应对象 = 客户端对象.execute(请求对象)[/align]
[align=left]7. 我们都知道响应对象也是由状态行(协议,状态码,状态描述),消息头,响应实体三部分组成。现在有了响应对象就可以获取响应对象中的消息。[/align]
[align=left]具体方法见上。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: