文档章节

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
10/17
0
0
Android 浅谈HttpClient工具类

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

Jonson
2013/07/25
0
3
使用单例模式实现自己的HttpClient工具类

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

moz1q1
2015/04/01
0
0
一个c#的与web服务器交互的HttpClient类

.Net类库里提供了HttpWebRequest等类,方便我们编程与Web服务器进行交互. 但是实际使用中我们经常会遇到以下需求, 基础类里没有直接提供相应的功能 (WebClient类包含这些功能,只是用起来稍微麻...

鉴客
2011/12/16
3.1K
1
HttpClient4.x:Get和Post提交数据

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

liangtee
2012/12/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
2
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
4
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0
Kernel I2C子系统

备注:所有图片来源于网络 1,I2C协议: 物理拓扑: I2C总线由两根信号线组成,一条是时钟信号线SCL,一条是数据信号线SDA。一条I2C总线可以接多个设备,每个设备都接入I2C总线的SCL和SDA。I...

yepanl
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部