android获取URLConnection和HttpClient网络请求响应码

fmms 12年前
           前段时间,有朋友问我网络请求怎么监听超时,这个我当时也没有没有做过,就认为是try....catch...获取异常,结果发现没有获取到,今天有时间,研究了一下,发现是从响应中来获取的对象中获取的,下面我把自己写的URLConnection和HttpClient网络请求响应码的实体共享给大家,希望对大家有帮助!    <pre class="brush:java; toolbar: true; auto-links: false;">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 ;  }     }</pre>