前段时间,有朋友问我网络请求怎么监听超时,这个我当时也没有没有做过,就认为是try....catch...获取异常,结果发现没有获取到,今天有时间,研究了一下,发现是从响应中来获取的对象中获取的,下面我把自己写的URLConnection和HttpClient网络请求响应码的实体共享给大家,希望对大家有帮助!
package com.zhangke.product.platform.http.json; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.http.Header; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ClientConnectionRequest; import org.apache.http.conn.params.ConnRoutePNames; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import com.zhangke.product.platform.util.NetworkUtil; import android.content.Context; import android.util.Log; /** * @author spring sky * QQ 840950105 * Email :vipa1888@163.com * 版权:spring sky * This class use in for request server and get server respnonse data * * */ public class NetWork { /** * 网络请求响应码 * <br> */ private int responseCode = 1; /** * 408为网络超时 */ public static final int REQUEST_TIMEOUT_CODE = 408; /** * 请求字符编码 */ private static final String CHARSET = "utf-8"; /** * 请求服务器超时时间 */ private static final int REQUEST_TIME_OUT = 1000*10; /** * 读取响应的数据时间 */ private static final int READ_TIME_OUT = 1000*5; private Context context ; public NetWork(Context context) { super(); this.context = context; } /** * inputstream to String type * @param is * @return */ public String getString(InputStream is ) { String str = null; try { if(is!=null) { BufferedReader br = new BufferedReader(new InputStreamReader(is, CHARSET)); String line = null; StringBuffer sb = new StringBuffer(); while((line=br.readLine())!=null) { sb.append(line); } str = sb.toString(); if(str.startsWith("<html>")) //获取xml或者json数据,如果获取到的数据为xml,则为null { str = null; } } } catch (Exception e) { e.printStackTrace(); } return str; } /** * httpClient request type * @param requestURL * @param map * @return */ public InputStream requestHTTPClient(String requestURL,Map<String, String> map) { InputStream inputStream = null; /** * 添加超时时间 */ BasicHttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, REQUEST_TIME_OUT); HttpConnectionParams.setSoTimeout(httpParams, READ_TIME_OUT); HttpClient httpClient = new DefaultHttpClient(httpParams); if (NetworkUtil.getNetworkType() == NetworkUtil.WAP_CONNECTED) { HttpHost proxy = new HttpHost("10.0.0.172", 80); httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); } HttpPost httpPost = new HttpPost(requestURL); httpPost.setHeader("Charset", CHARSET); httpPost.setHeader("Content-Type","application/x-www-form-urlencoded"); List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>(); Iterator<String> it = map.keySet().iterator(); while(it.hasNext()) { String key = it.next(); String value = map.get(key); Log.e("request server ", key+"="+value); list.add(new BasicNameValuePair(key, value)); } try { httpPost.setEntity(new UrlEncodedFormEntity(list,CHARSET)); HttpResponse response =httpClient.execute(httpPost); inputStream = response.getEntity().getContent(); responseCode = response.getStatusLine().getStatusCode(); //获取响应码 Log.e("response code", response.getStatusLine().getStatusCode()+""); // Header[] headers = response.getAllHeaders(); //获取header中的数据 // for (int i = 0; i < headers.length; i++) { // Header h = headers[i]; // Log.e("request heads", h.getName()+"="+h.getValue()+" "); // } } catch (Exception e) { inputStream = null; e.printStackTrace(); } return inputStream; } /** * url request type * @param requestURL * @param map * @return */ public InputStream requestHTTPURL(String requestURL,Map<String,String> map ) { InputStream inputStream = null; URL url = null; URLConnection urlconn = null; HttpURLConnection conn = null; try { url = new URL(requestURL); if (NetworkUtil.getNetworkType() == NetworkUtil.WAP_CONNECTED) { Proxy proxy = new Proxy(java.net.Proxy.Type.HTTP, new InetSocketAddress("10.0.0.172", 80)); urlconn = url.openConnection(proxy); }else{ urlconn = url.openConnection(); } conn = (HttpURLConnection) urlconn; if(conn!=null) { conn.setReadTimeout(READ_TIME_OUT); conn.setConnectTimeout(REQUEST_TIME_OUT); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setRequestProperty("Charset", CHARSET); conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); OutputStream os = conn.getOutputStream(); StringBuffer sb = new StringBuffer(); Iterator<String> it = map.keySet().iterator(); while(it.hasNext()) { String key = it.next(); String value = map.get(key); Log.e("request server ", key+"="+value); sb.append(key).append("=").append(value).append("&"); } String params = sb.toString().substring(0, sb.toString().length()-1); os.write(params.getBytes()); os.close(); inputStream = conn.getInputStream(); Log.e("response code", conn.getResponseCode()+""); responseCode = conn.getResponseCode(); //获取响应码 // Map<String, List<String>> headers = conn.getHeaderFields(); //获取header中的数据 // Iterator<String> is = headers.keySet().iterator(); // while(is.hasNext()) // { // String key = is.next(); // List<String> values = headers.get(key); // String value = ""; // for (int i = 0; i < values.size(); i++) { // value+= values.get(i); // } // Log.e("request heads",key+"="+value+" "); // } } } catch (Exception e) { inputStream = null; e.printStackTrace(); } return inputStream; } /** * 网络请求响应码 */ public int getResponseCode() { return responseCode ; } }
上面就是详细的代码,如果使用过程中有问题,请联系我 !
QQ:840950105
Email:vipa1888@163.com