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

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 post get android
相关文章推荐