HttpClient(访问网络) get方式,post方式。返回值有String,InputStream,byte[]
2014-09-18 11:25
826 查看
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; 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.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; public class HttpClientHelper { /** * 作用:实现网络访问文件,将获取到数据储存在文件流中 * * @param url * :访问网络的url地址 * @return inputstream */ public static InputStream loadFileFromURL(String url) { // 创建HttpClient对象:通过实例化DefaultHttpClient获得; HttpClient httpClient = new DefaultHttpClient(); // 创建HttpGet或HttpPost对象:通过实例化 HttpGet或HttpPost // 获得,而构造方法的参数是urlstring(即需要访问的网络url地址)。也可以通过调用setParams()方法来添加请求参数; HttpGet methodGet = new HttpGet(url); try { // 调用HttpClient对象的execute()方法,参数是刚才创建的 HttpGet或HttpPost对象 // ,返回值是HttpResponse对象; HttpResponse response = httpClient.execute(methodGet); // 通过response对象中的getStatusLine()方法和getStatusCode()方法获取服务器响应状态。 if (response.getStatusLine().getStatusCode() == 200) { // response对象的getEntity()方法,返回HttpEntity对象。该对象中包含了服务器页面body体之内的内容。 HttpEntity entity = response.getEntity(); // entity对象的getContent()方法将从服务器中获取到所有内容放到inputstream对象中。 return entity.getContent(); } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 作用:实现网络访问文件,返回字符串 * * @param url * :访问网络的url地址 * @return String */ public static String loadTextFromURL(String url) { HttpClient httpClient = new DefaultHttpClient(); HttpGet methodGet = new HttpGet(url); try { HttpResponse response = httpClient.execute(methodGet); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity entity = response.getEntity(); // 借助EntityUtils的toString()方法对 HttpEntity对象进行处理,返回字符串。 return EntityUtils.toString(entity); } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 作用:实现网络访问文件,将获取到的数据存在字节数组中 * * @param url * :访问网络的url地址 * @return byte[] */ public static byte[] loadByteFromURL(String url) { HttpClient httpClient = new DefaultHttpClient(); HttpGet methodGet = new HttpGet(url); try { HttpResponse response = httpClient.execute(methodGet); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity entity = response.getEntity(); // 借助EntityUtils的toByteArray()方法对 // HttpEntity对象进行处理,将entity对象中的内容处理成自己数组。 return EntityUtils.toByteArray(entity); } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 作用:实现网络访问文件,先给服务器通过“GET”方式提交数据,再返回相应的数据 * * @param url * :访问网络的url地址 * @param params * :访问url时,需要传递给服务器的参数。格式为:username=wangxiangjun&password=abcde& * qq=32432432 * 为了防止传中文参数时出现编码问题。采用URLEncoder.encode()对含中文的字符串进行编码处理。 * 服务器端会自动对进行过编码的字符串进行decode()解码。 * @return byte[] */ public static byte[] doGetSubmit(String url, String params) { HttpClient httpClient = new DefaultHttpClient(); HttpGet methodGet = new HttpGet(url + "?" + params); try { HttpResponse response = httpClient.execute(methodGet); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity entity = response.getEntity(); // 借助EntityUtils的toByteArray()方法对 // HttpEntity对象进行处理,将entity对象中的内容处理成自己数组。 return EntityUtils.toByteArray(entity); } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 作用:实现网络访问文件,先给服务器通过“POST”方式提交数据,再返回相应的数据 * * @param url * :访问网络的url地址 * @param * * @return byte[] */ public static byte[] doPostSubmit(String url, List<NameValuePair> params) { HttpClient httpClient = new DefaultHttpClient(); HttpPost methodPost = new HttpPost(url); try { methodPost.setEntity(new UrlEncodedFormEntity(params)); HttpResponse response = httpClient.execute(methodPost); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity entity = response.getEntity(); // 借助EntityUtils的toByteArray()方法对 // HttpEntity对象进行处理,将entity对象中的内容处理成自己数组。 return EntityUtils.toByteArray(entity); } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 作用:实现网络访问文件,先给服务器通过“POST”方式提交数据,再返回相应的数据 * * @param url * :访问网络的url地址 * @param * @return byte[] */ public static byte[] doPostSubmit(String url, Map<String, Object> params) { HttpClient httpClient = new DefaultHttpClient(); HttpPost methodPost = new HttpPost(url); // 将map中的数据一一放进List<NameValuePair>对象中。 // 之所以要做这一步骤,是因为HttpPost对象的setEntity()方法只接收List<NameValuePair>对象作为参数。 List<NameValuePair> list = new ArrayList<NameValuePair>(); for (Map.Entry<String, Object> entry : params.entrySet()) { list.add(new BasicNameValuePair(entry.getKey(), entry.getValue() .toString())); } try { // 将表单中的数据先放进list对象中,然后再被放到UrlEncodedFormEntity对象中, // 最后再通过HttpPost对象的setEntity()方法将这些表单数据传递到服务器中的request对象中。 methodPost.setEntity(new UrlEncodedFormEntity(list, "utf-8")); HttpResponse response = httpClient.execute(methodPost); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity entity = response.getEntity(); // 借助EntityUtils的toByteArray()方法对 // HttpEntity对象进行处理,将entity对象中的内容处理成自己数组。 return EntityUtils.toByteArray(entity); } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 作用:将输入流转成字节数组 * * * @return byte[] */ public static byte[] inputStreamToByte(InputStream is) { ByteArrayOutputStream baos = null; byte[] buffer = new byte[8 * 1024]; int c = 0; try { while ((c = is.read(buffer)) != -1) { baos.write(buffer, 0, c); baos.flush(); } return baos.toByteArray(); } catch (IOException e) { e.printStackTrace(); } finally { if (baos != null) { try { baos.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } }
相关文章推荐
- HttpClient(访问网络) get方式,post方式。返回值有String,InputStream,byte[]
- HttpClient(访问网络) get方式,post方式。返回值有String,InputStream,byte[]
- Android 网络请求方式之HttpClient,GET,POST,PUT请求使用方法
- Android 网络请求方式之HttpClient,GET,POST,PUT请求使用方法
- android中HTTP协议访问网络及其方式及其http的GET和POST的优缺点
- http跨平台访问接口的post,get,及文件上传方式工具类(httpClient)
- Android HttpClient get、post 访问网络
- Android HttpClient(Get,Post方式)进行网络通信
- Android网络数据之向服务器提交数据的三种方式(get+post+AsyncHttpClient)
- android开发 使用HttpClient访问网络,post、get方式。注册、登陆、上传文件。
- HttpClient开发 入门 get Post 等方式
- 【网络】JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
- Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
- JAVA通过HTTP访问:Post+Get方式
- HttpClient详解,Java发送Http的post、get方式请求 --待整理
- HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理
- android 使用http get 与post 访问网络
- Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
- [网络收集]form表单提交方式post和get,Request.QueryString,Request.Form
- http 的get,post方式访问url