前几天刚入职,研究了一下android里面的http协议的get和post请求:
Android里面有HttpClient可以用来访问网页的接口,下面来介绍HttpClient接口的使用,
1.GET:
/**
* GET请求
* @param path 网页路径
* @param params 参数
* @param values 参数的值
* @return JSON
*/
public static String doGet(String path,String[] params,String[] values){
try {
HttpClient httpClient = new DefaultHttpClient();//创建httpClient对象
String url = URLParamUtil.praiseGetParams(path, params, values);//组合网页参数
HttpGet httpGet = new HttpGet(url);//创建GET对象
HttpResponse httpResponse = httpClient.execute(httpGet);//开始访问,用HttpResponse来收返回的数据
//如果连接成功,读取数据
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
return readData(httpResponse.getEntity().getContent());//通过HttpResponse来获得对应的输出流
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 解析URL
* @param path 路径
* @param params 参数
* @param values 值
* @return URL
*/
public static String praiseGetParams(String path,String[] params,String[] values){
String url = "";
//如果params和values为空就返回path
if(params==null||values==null){
url = path;
}
//如果参数和值的大小不同,抛出异常
else if(params.length != values.length){
try {
throw new Exception("参数异常");
} catch (Exception e) {
e.printStackTrace();
}
}
//正常解析情况
else{
url = path + "?";
for(int i=0;i<params.length;i++){
url += (params[i] + "=" + values[i] + "&");
}
//截取最后的一个字符"&"
url = url.substring(0, url.length()-1);
}
return url;
}
/**
* 通过字节输出流读取数据
* @param is
* @return JSON
*/
public static String readData(InputStream is){
BufferedReader br = new BufferedReader(new InputStreamReader(is));//将字节输出流转换为字符输出流
StringBuffer sb = new StringBuffer();
String line = "";
try {
line = br.readLine();
//循环读取数据
while(line != null){
sb.append(line + "\n");
line = br.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}2.POST
/**
* POST请求
* @param path 网页路径
* @param params 参数
* @param values 参数的值
* @return JSON
*/
public static String doPost(String path,String[] params,String[] values){
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(path); //创建POST对象
//创建参数
List<NameValuePair> pairs = URLParamUtil.praisePostParams(params, values);
HttpEntity entity = new UrlEncodedFormEntity(pairs,"UTF-8");
httpPost.setEntity(entity);
HttpResponse httpResponse = httpClient.execute(httpPost);
// 请求成功开始读取数据
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
return readData(httpResponse.getEntity().getContent());
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 解析POST参数
* @return pairs
*/
public static List<NameValuePair> praisePostParams(String[] params,String[] values){
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
NameValuePair pair = null;
//遍历数组创建参数
for(int i=0;i<params.length;i++){
pair = new BasicNameValuePair(params[i], values[i]);
pairs.add(pair);
}
return pairs;
}注意:这些操作必须在线程中运行
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/qq_22605739/article/details/47081661