zoukankan      html  css  js  c++  java
  • android获取URLConnection和HttpClient网络请求响应码

            前段时间,有朋友问我网络请求怎么监听超时,这个我当时也没有没有做过,就认为是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


     

  • 相关阅读:
    Java 定时任务
    Swing中常用的方法
    瀑布流ajax分页
    权限管理
    图片自动加水印
    jsp自动生成静态页(提供思路)
    分页查询语句
    使用phpmailer发送邮件(以QQ邮箱为例)
    在浏览器的标签页显示网站标志图标(或指定图标)的方法
    随机生成验证码
  • 原文地址:https://www.cnblogs.com/springskyhome/p/3689941.html
Copyright © 2011-2022 走看看