需要Demo的可以直接下载来看看:http://download.csdn.net/detail/shinay/4380308
在Android开发Http程序的时候,可以选择HttpURLConnection和HttpClient接口进行编程,下面就说下这两种方式的写法:
HttpURLConnection
get方式:
/** * 通过Get方式从网络获取数据 * @param urlString URL地址 */ public static String getResultFromNetByGet() { String urlString = "http://suggestion.baidu.com/su?wd=a"; StringBuffer sb = new StringBuffer(); try { URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); // 设置请求方式为GET, 由于默认为GET, 所以这里可以省略 /** * 得到InputStream对象, 调用getInputStream会 * 自动去调用connect()方法, 因此前面我们可以不 * 用自己调connect()方法 */ InputStream in = connection.getInputStream(); /** * 通过InputStream获取到Reader对象, 方便我们 * 读取数据, 并设置对应编码避免中文乱码问题 */ InputStreamReader isr = new InputStreamReader(in, "GBK"); BufferedReader reader = new BufferedReader(isr); String temp; while((temp = reader.readLine()) != null) { sb.append(temp); } in.close(); // 关闭InputStream connection.disconnect(); // 断开连接 } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); }
post方式:
/** * 通过Post方式从网络获取数据 * @param urlString URL地址 */ public static String getResultFromNetByPost() { String urlString = "http://www.kd185.com/ems.php"; String wen = "MS2201828"; String btnSearch = "EMS快递查询"; StringBuffer sb = new StringBuffer(); URL url; try { url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); // 设置请求方式为POST // connection.setConnectTimeout(10000); // 连接超时 单位毫秒 // connection.setReadTimeout(2000); // 读取超时 单位毫秒 connection.setDoOutput(true); // 是否输入参数 StringBuffer params = new StringBuffer(); // 表单参数与get形式一样 params.append("wen").append("=").append(wen).append("&") .append("btnSearch").append("=").append(btnSearch); byte[] bytes = params.toString().getBytes(); connection.getOutputStream().write(bytes); // 输入参数 InputStream in = connection.getInputStream(); InputStreamReader isr = new InputStreamReader(in, "GBK"); BufferedReader reader = new BufferedReader(isr); String temp; while((temp = reader.readLine()) != null) { sb.append(temp); } in.close(); // 关闭InputStream connection.disconnect(); // 断开连接 } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); }
HttpClient
get方式:
/** * 通过Get方式从网络获取数据 * @param urlString URL地址 */ public static String getResultFromNetByGet() { String urlString = "http://suggestion.baidu.com/su?wd=a"; StringBuffer sb = new StringBuffer(); try { // HttpGet连接对象 HttpGet httpRequest = new HttpGet(urlString); // 取得HttpClient对象 HttpClient httpclient = new DefaultHttpClient(); // 请求HttpClient,取得HttpResponse HttpResponse httpResponse; httpResponse = httpclient.execute(httpRequest); // 请求成功 if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 取得返回的字符串 String strResult = EntityUtils.toString(httpResponse.getEntity()); sb.append(strResult); } else { sb.append("请求错误!"); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); }
/** * 通过Post方式从网络获取数据 * @param urlString URL地址 */ public static String getResultFromNetByPost() { String urlString = "http://www.kd185.com/ems.php"; String wen = "MS2201828"; String btnSearch = "EMS快递查询"; StringBuffer sb = new StringBuffer(); try { // HttpPost连接对象 HttpPost httpRequest = new HttpPost(urlString); // 使用NameValuePair来保存要传递的Post参数 List<NameValuePair> params = new ArrayList<NameValuePair>(); // 添加要传递的参数 params.add(new BasicNameValuePair("wen", wen)); params.add(new BasicNameValuePair("btnSearch", btnSearch)); // 设置字符集 // HttpEntity httpentity = new UrlEncodedFormEntity(params, "GBK"); HttpEntity httpentity = new UrlEncodedFormEntity(params); // 请求httpRequest httpRequest.setEntity(httpentity); // 取得默认的HttpClient HttpClient httpclient = new DefaultHttpClient(); // 取得HttpResponse HttpResponse httpResponse = httpclient.execute(httpRequest); // 请求成功 if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 取得返回的字符串 String strResult = EntityUtils.toString(httpResponse.getEntity()); sb.append(new String(strResult.getBytes("iso8859_1"), "gbk")); } else { sb.append("请求错误!"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); }
访问网络需要如下权限
<uses-permission android:name="android.permission.INTERNET"/>
注意:在Android手机上,如果网络设置为cmwap方式上网的话,在有些机子或者有些ROM中是无法正常访问的,因此在这种情况下,还要用代理的方式,下面就讲讲:
首先是判断当前网络是否为cmwap:
/** * 判断当前网络模式是否为CMWAP * @param context * @return */ public static boolean isCmwapNet(Context context) { ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netWrokInfo = manager.getActiveNetworkInfo(); if(netWrokInfo == null || !netWrokInfo.isAvailable()) { return false; } else if (netWrokInfo.getTypeName().equals("mobile") && netWrokInfo.getExtraInfo().equals("cmwap")){ return true; } return false; }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
/** * 通过Get方式从网络获取数据(网络模式为CMWAP) * 需要使用代理 * @param urlString URL地址 */ public static String getResultFromNetByGetAndCmwap() { String urlString = "http://10.0.0.172/su?wd=a"; StringBuffer sb = new StringBuffer(); try { URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("X-Online-Host", "suggestion.baidu.com"); connection.setRequestMethod("GET"); // 设置请求方式为GET, 由于默认为GET, 所以这里可以省略 /** * 得到InputStream对象, 调用getInputStream会 * 自动去调用connect()方法, 因此前面我们可以不 * 用自己调connect()方法 */ InputStream in = connection.getInputStream(); /** * 通过InputStream获取到Reader对象, 方便我们 * 读取数据, 并设置对应编码避免中文乱码问题 */ InputStreamReader isr = new InputStreamReader(in, "GBK"); BufferedReader reader = new BufferedReader(isr); String temp; while((temp = reader.readLine()) != null) { sb.append(temp); } in.close(); // 关闭InputStream connection.disconnect(); // 断开连接 } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); }
/** * 通过Post方式从网络获取数据(网络模式为CMWAP) * 需要使用代理 * @param urlString URL地址 */ public static String getResultFromNetByPostAndCmwap() { String urlString = "http://10.0.0.172/ems.php"; String wen = "MS2201828"; String btnSearch = "EMS快递查询"; StringBuffer sb = new StringBuffer(); URL url; try { url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("X-Online-Host", "www.kd185.com"); connection.setRequestMethod("POST"); // 设置请求方式为POST // connection.setConnectTimeout(10000); // 连接超时 单位毫秒 // connection.setReadTimeout(2000); // 读取超时 单位毫秒 connection.setDoOutput(true); // 是否输入参数 StringBuffer params = new StringBuffer(); // 表单参数与get形式一样 params.append("wen").append("=").append(wen).append("&") .append("btnSearch").append("=").append(btnSearch); byte[] bytes = params.toString().getBytes(); connection.getOutputStream().write(bytes); // 输入参数 InputStream in = connection.getInputStream(); InputStreamReader isr = new InputStreamReader(in); BufferedReader reader = new BufferedReader(isr); String temp; while((temp = reader.readLine()) != null) { sb.append(temp); } in.close(); // 关闭InputStream connection.disconnect(); // 断开连接 } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); }
/** * 通过Get方式从网络获取数据(网络模式为CMWAP) * 需要使用代理 * @param urlString URL地址 */ public static String getResultFromNetByGetAndCmwap() { String urlString = "/su?wd=a"; StringBuffer sb = new StringBuffer(); try { HttpHost proxy = new HttpHost("10.0.0.172", 80, "http"); HttpHost target = new HttpHost("suggestion.baidu.com", 80, "http"); // HttpGet连接对象 HttpGet httpRequest = new HttpGet(urlString); // 取得HttpClient对象 HttpClient httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); // 请求HttpClient,取得HttpResponse HttpResponse httpResponse; httpResponse = httpclient.execute(target, httpRequest); // 请求成功 if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 取得返回的字符串 String strResult = EntityUtils.toString(httpResponse.getEntity()); sb.append(strResult); } else { sb.append("请求错误!"); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); }
/** * 通过Post方式从网络获取数据(网络模式为CMWAP) * 需要使用代理 * @param urlString URL地址 */ public static String getResultFromNetByPostAndCmwap() { String urlString = "/ems.php"; String wen = "MS2201828"; String btnSearch = "EMS快递查询"; StringBuffer sb = new StringBuffer(); try { HttpHost proxy = new HttpHost("10.0.0.172", 80, "http"); HttpHost target = new HttpHost("www.kd185.com", 80, "http"); // HttpPost连接对象 HttpPost httpRequest = new HttpPost(urlString); // 使用NameValuePair来保存要传递的Post参数 List<NameValuePair> params = new ArrayList<NameValuePair>(); // 添加要传递的参数 params.add(new BasicNameValuePair("wen", wen)); params.add(new BasicNameValuePair("btnSearch", btnSearch)); // 设置字符集 // HttpEntity httpentity = new UrlEncodedFormEntity(params, "GBK"); HttpEntity httpentity = new UrlEncodedFormEntity(params); // 请求httpRequest httpRequest.setEntity(httpentity); // 取得默认的HttpClient HttpClient httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); // 取得HttpResponse HttpResponse httpResponse = httpclient.execute(target, httpRequest); // 请求成功 if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 取得返回的字符串 String strResult = EntityUtils.toString(httpResponse.getEntity()); //sb.append(new String(strResult.getBytes("iso8859_1"), "gbk")); sb.append(strResult); } else { sb.append("请求错误!"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); }