开发者社区> 一叶飘舟> 正文

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

简介:
+关注继续查看

http://www.open-open.com/lib/view/open1326868964593.html

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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
前端面试 | 18个常见HTML问题与答案
HTML 是互联网上应用开发最广泛的语言之一,它可以带我们深入 Web 开发的世界,提高技能。如果你想从事 WEB 开发(前端开发)相关的职业,HTML 的基础就必须熟练掌握,下面就以问答的形式开启我们的回顾之路,为即将踏入这个行业的新人们铺铺路。
6 0
PS基本操作介绍与下载
PS基本操作介绍与下载
4 0
悟透前端 | ECMAScript 6 的 Map 映射
映射(Map)是 ECMAScript 6 规范中引入的一种数据结构。这是一种存储键值对列表很方便的方法,类似于其他编程语言中的词典或者哈希表。
5 0
Flutter 混合开发(下)
某些应用程序可能需要使用移动设备进行拍照或者选择相册中的照片,Flutter官方提供了插件:image_picker
4 0
一个异步流程控制库:Async.js
【摘要】Node.js的异步编程方式有效提高了应用性能,然而回调地狱却让人望而生畏,Promise让我们告别回调函数;在实践过程中,却发现Promise并不完美;技术进步是无止境的,后来有了Async/Await,让我们能够写出阻塞式的异步处理代码,然而对于一些流程控制方面还是很难写出优雅的代码。async.js的出现,能够写出简单清晰的异步流程控制代码。本文主要介绍项目中的常用方法。
4 0
Vue源码学习 | 4个实用的Javascript技巧
学习一门语言的一种非常有效的方法就是阅读该编程语言开发的优秀开源项目的源代码。 Vuejs是最好的Javascript开源项目之一。
4 0
浅谈API设计风格
API 风格是一个备受争议的话题,大多数开发者都熟悉 REST 与 GraphQL 的争论,更不用说其他风格了。本文将介绍常见的8种不同的API风格。
6 0
JavaScript面向对象详解(四)
在上一篇中, 我们讨论了ES5中, 实现继承的一些方式. 在最后, 我们说了组合继承是相对完美的解决方案, 但是它也存在一些问题. 这篇文章, 我们就通过某种新的模式, 给出一种目前使用最多, 也是我们最终的解决方案.
7 0
React系列(一) -邂逅React开发
我个人一直喜欢使用邂逅这个词,我希望每个人在和一个新技术接触的时候,都是一场美丽的邂逅。 而React本身绝对是优雅和美丽的,所以从这里开始,我们和React来一场美丽的邂逅吧!
5 0
React系列二 - 核心JSX语法一
虽然目前React开发模式中更加流行hooks,但是依然有很多的项目依然是使用类组件(包括AntDesign库中); 但是有很多的同学对ES6中的类不太熟悉,所以这里我还是补充一下;
4 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载