文档章节

httpclient的get及post

帅的不像男的
 帅的不像男的
发布于 2016/04/07 10:44
字数 1066
阅读 100
收藏 5

需要的包有

httpclient-4.2.5.jar
httpcore-4.2.4.jar

创建一个TestClient类(测试)

有get和post方法

public class TestClient {
	
	 HttpClient httpclient=new DefaultHttpClient();
	    /**
	     * 发送 post请求访问本地应用并根据传递参数不同返回不同结果
	     */
	    public String post(String url,String respEncoding) {
	        return post(url,"UTF-8",respEncoding,new String());
	    }

	    /**
	     * 发送 post请求访问本地应用并根据传递参数不同返回不同结果
	     */
	    public String post(String url,String reqEncoding,String respEncoding,String param) {
	        String resStr = "";
	        // 创建httppost
	        HttpPost httppost = new HttpPost(url);
	    	// 请求超时
	   	    httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
	        // 读取超时
	   	    httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
	        
	        // 创建参数队列
	        String[] a= param.split("\\&");
	        List list =new ArrayList();
	        for(int i=0;i<a.length;i++){
	        	String[] b = a[i].split("\\=");
	        	list.add(new BasicNameValuePair(b[0], b[1]));//参数
	        }
	        UrlEncodedFormEntity uefEntity;
	        try {
	            uefEntity = new UrlEncodedFormEntity(list, reqEncoding);
	            httppost.setEntity(uefEntity);
	            HttpResponse response;
	            response = httpclient.execute(httppost);
	            HttpEntity entity = response.getEntity();
	            if (entity != null && response.getStatusLine().getStatusCode()==HttpStatus.SC_OK) {
	                resStr = EntityUtils.toString(entity,respEncoding);
	            }
	        } catch (ClientProtocolException e) {
	            e.printStackTrace();
	        } catch (UnsupportedEncodingException e1) {
	            e1.printStackTrace();
	        } catch (IOException e) {
	            e.printStackTrace();
	        } finally {
	            // 关闭连接,释放资源
                //httpclient.getConnectionManager().shutdown();
	        }
	        return resStr;
	    }

	    /**
	     * 发送 get请求
	     */
	    public String get(String url) {
	        //httpclient = new DefaultHttpClient();
	        String resStr = "";
	        try {
	            // 创建httpget.
	            HttpGet httpget = new HttpGet(url);
	            // 请求超时
		   	    httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
		        // 读取超时
		   	    httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
	            // 执行get请求.
	            HttpResponse response = httpclient.execute(httpget);
	            // 获取响应实体
	            HttpEntity entity = response.getEntity();
	            // 打印响应状态
	            System.out.println(response.getStatusLine());
	            if (entity != null) {
	                // 打印响应内容长度
//	                System.out.println("Response content length: "
//	                        + entity.getContentLength());
	                // 打印响应内容
//	                System.out.println("Response content: "
//	                        + EntityUtils.toString(entity));
	                resStr=EntityUtils.toString(entity);
	            }
	        } catch (ClientProtocolException e) {
	            e.printStackTrace();
	        } catch (ParseException e) {
	            e.printStackTrace();
	        } catch (IOException e) {
	            e.printStackTrace();
	        } finally {
	            // 关闭连接,释放资源
	            httpclient.getConnectionManager().shutdown();
	        }
	        return resStr;
	    }
}

创建一个MainClass类,调用httpclient类的方法

public class MainClass {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 TestClient http = new TestClient();//构造参数
		 List list =new ArrayList();
	     list.add(new BasicNameValuePair("username", "hty1"));//参数
        
        System.out.println(http.post("http://localhost:8085/checkIntegralUsername.shtml", "UTF-8", "UTF-8", "username=hty1&mid=123456"));
        System.out.println(http.get("http://localhost:8085/checkIntegralUsername.shtml"));//访问的页面
	}

}

之前的使用java原生的http请求代码

public class TestHttp {
	static Random random;
	private static String table = "0123456789";

	public static void main(String[] args) {

	}


	/**
	 * 向指定URL发送GET方法的请求
	 * 
	 * @param url
	 *            发送请求的URL
	 * @param param
	 *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
	 * @return URL 所代表远程资源的响应结果
	 */
	public static String sendGet(String url, String param) {
		String result = "";
		BufferedReader in = null;
		String urlNameString="";
		
		try {
			urlNameString = url + "?" + param;
			System.out.println(urlNameString+"---发送GET请求"+new Date());
			URL realUrl = new URL(urlNameString);
			// 打开和URL之间的连接
			URLConnection connection = realUrl.openConnection();
			// 设置通用的请求属性
			connection.setRequestProperty("accept", "*/*");
			connection.setRequestProperty("connection", "Keep-Alive");
			connection
					.setRequestProperty("User-Agent",
							"Dalvik/1.6.0 (Linux; U; Android 4.2.2; GT-I9152 Build/JDQ39)");
			connection.setReadTimeout(10000);
			connection.setConnectTimeout(10000);
			// 建立实际的连接
			connection.connect();
			// 获取所有响应头字段
			Map<String, List<String>> map = connection.getHeaderFields();
			// 遍历所有的响应头字段
			for (String key : map.keySet()) {
				System.out.println(key + "--->" + map.get(key));
			}
			// 定义 BufferedReader输入流来读取URL的响应
			in = new BufferedReader(new InputStreamReader(connection
					.getInputStream()));
			String line;
			while ((line = in.readLine()) != null) {
				result += line;
			}
		} catch (Exception e) {
			System.out.println(urlNameString+"---发送GET请求出现异常!---"+new Date() + e);
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		// 使用finally块来关闭输入流
		finally {
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
//		System.out.println("---" + result); 
		return result;
	}

	/**
	 * 向指定 URL 发送POST方法的请求
	 * 
	 * @param url
	 *            发送请求的 URL
	 * @param param
	 *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
	 * @return 所代表远程资源的响应结果
	 */
	public static String sendPost(String url, String param) {
		PrintWriter out = null;
		BufferedReader in = null;
		String result = "";
		try {
			URL realUrl = new URL(url);
			// 打开和URL之间的连接
			URLConnection conn = realUrl.openConnection();
			// 设置通用的请求属性
			conn.setRequestProperty("accept", "*/*");
			conn.setRequestProperty("connection", "Keep-Alive");
			conn.setRequestProperty("user-agent",
					"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			// 发送POST请求必须设置如下两行
			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setReadTimeout(10000);
			conn.setConnectTimeout(10000);
			// 获取URLConnection对象对应的输出流
			OutputStreamWriter osw = new OutputStreamWriter(conn
			    	 .getOutputStream(),"UTF-8");
			out = new PrintWriter(osw);
			// 发送请求参数
			out.print(param);
			// flush输出流的缓冲
			out.flush();
			// 定义BufferedReader输入流来读取URL的响应
			in = new BufferedReader(new InputStreamReader(
					conn.getInputStream(), "UTF-8"));
			String line;
			while ((line = in.readLine()) != null) {
				result += line;
			}
		} catch (Exception e) {
			System.out.println("发送 POST 请求出现异常!" + e);
			e.printStackTrace();
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		// 使用finally块来关闭输出流、输入流
		finally {
			try {
				if (out != null) {
					out.close();
				}
				if (in != null) {
					in.close();
				}
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
//		System.out.println(result);
		return result;
	}

	private static String recordkey() {
		String str = "150000911101112013082008-01-25 20:23:30testkey";
		return MD5(str);
	}

	/**
	 * <Field128>MAC算法
	 * 
	 * @param sourceStr
	 * @return
	 */
	private static String MD5(String sourceStr) {
		String result = "";
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(sourceStr.getBytes());
			byte b[] = md.digest();
			int i;
			StringBuffer buf = new StringBuffer("");
			for (int offset = 0; offset < b.length; offset++) {
				i = b[offset];
				if (i < 0)
					i += 256;
				if (i < 16)
					buf.append("0");
				buf.append(Integer.toHexString(i));
			}
			result = buf.toString().substring(0, 16);
		} catch (NoSuchAlgorithmException e) {
			System.out.println(e);
		}
		return result;
	}
}


© 著作权归作者所有

共有 人打赏支持
帅的不像男的
粉丝 10
博文 90
码字总数 47450
作品 0
深圳
程序员
Apache HttpClient 资源释放、请求超时,导致线程池用光、内存不足

Apache HttpClient,据说很强大,可以支持峰值一秒7万以上的请求。不过需要注意一些资源释放和超时处理的问题。 问题1:线程资源无法释放,最终导致内存不足、或线程池被用光。 问题代码: ...

onedotdot
前天
0
0
HttpClient4.x:Get和Post提交数据

HttpClient是一款用Java写的非常好用的基于Http协议的客户端编程工具包。具体举例来讲,用它可以模拟form表单提交数据动作,可以模拟访问网页动作及得到网页源码内容等等,这两点或许是我们在...

liangtee
2012/12/02
0
0
使用单例模式实现自己的HttpClient工具类

引子 在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务。你可以把HttpClient想象成一个浏览器,通过...

moz1q1
2015/04/01
0
0
Android 浅谈HttpClient工具类

在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务。你可以把HttpClient想象成一个浏览器,通过它的...

Jonson
2013/07/25
0
3
【J2EE系列】HttpClient 学习整理 [转]

HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的实现,发现这个开源项目之后就有点眉目了,令人头痛的cookie问题还是有办法解决滴。在网上整理了一些东西,写得很好,寄放...

磊神Ray
2012/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

python进制转换

#进制转换print(bin(10)) #十进制转换成二进制print(oct(10)) #十进制转换成八进制print(hex(10)) #十进制转换成十六进制print(int('1010',2)) #二进制转十进制print(int(...

fadsaa
11分钟前
0
0
syntax error near unexpected token

最近不断重复在虚拟机CentOS测试安装gitlab,因为gitlab有一个脚本需要饭强才能下载,于是我先在windows下载好再上传到虚拟机,可是执行脚本的时候提示“syntax error near unexpected toke...

W_Lu
20分钟前
0
0
Redis基础、高级特性与性能调优

本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概览Redis提供的高级能力,并在部署、维护、性能调优等多个方面进行更深入的介绍和指导...

Java干货分享
21分钟前
1
0
Redis使用lua脚本实现increase + expire 的原子操作

lua脚本: public Integer incrEX(String key, long defaultExpire){ String script = "local current = redis.call('incr',KEYS[1]);" + " local t = redis.call......

大海201506
22分钟前
0
0
Dubbo 源码分析(一)一环境搭建

环境搭建的步骤有哪些 依赖外部的环境 使用的开发工具 源码的拉取 结构大致介绍 1 依赖的外部环境 安装JDK 安装Git 安装maven 这边我们就不介绍怎么安装这些外部环境了,大家自行从安装这些外...

小刀爱编程
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部