文档章节

httpclient的get及post

帅的不像男的
 帅的不像男的
发布于 2016/04/07 10:44
字数 1066
阅读 99
收藏 5
点赞 2
评论 0

需要的包有

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
博文 84
码字总数 46416
作品 0
深圳
程序员
关于HttpClient重试策略的研究

原文出处:kingszelda 一、背景 由于工作上的业务本人经常与第三方系统交互,所以经常会使用HttpClient与第三方进行通信。对于交易类的接口,订单状态是至关重要的。 这就牵扯到一系列问题:...

kingszelda ⋅ 04/25 ⋅ 0

使用httpClient 调起https url接口

遇到的问题* 1、ssl证书信任,解决方式信任所有证书 2、生成请求体调用httpPost.setEntity()时输出的参数格式有误,有多种Entity可以选择(常用 StringEntity、UrlEncodedFormEntity、FileE...

梦魂清风 ⋅ 05/10 ⋅ 0

聊聊spring cloud gateway的NettyConfiguration

序 本文主要研究下spring cloud gateway的NettyConfiguration NettyConfiguration spring cloud gateway使用的是reactor的httpclient,其通过nettyClientOptions这个bean来进行构造options,......

go4it ⋅ 06/03 ⋅ 0

大家都用什么工具发起http请求的呢?

我以前喜欢用apache的 httpClient ,公司用jersey。听经理说jersey的性能好,是真的吗?我在网上并没有搜到相关的性能比较,java9也带了一个httpClient,不知性能对比起来又如何?...

暗中观察 ⋅ 04/22 ⋅ 0

聊聊spring cloud的PreserveHostHeaderGatewayFilter

序 本文主要研究下spring cloud gateway的PreserveHostHeaderGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gatew......

go4it ⋅ 06/14 ⋅ 0

Httpclient报Timeout waiting for connection from pool 异常

下面这段代码在定时一分钟的任务里面执行: public String remoteJsonUTF8(String url) { HttpGet get = null; CloseableHttpResponse response = null; String json = null; CloseableHttpCl......

小小的小小snake ⋅ 05/17 ⋅ 0

聊聊spring cloud gateway的streaming-media-types属性

序 本文主要研究下spring cloud gateway的streaming-media-types属性 配置 配置说明 GatewayProperties spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gatew......

go4it ⋅ 06/07 ⋅ 0

聊聊spring cloud gateway的RemoveHopByHopHeadersFilter

序 本文主要研究一下spring cloud gateway的RemoveHopByHopHeadersFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC1-sources.jar!/org/springframework/cloud/gateway......

go4it ⋅ 05/30 ⋅ 0

用httpclient监控网站系统运行

java httpclient做一个监控网站运行情况的程序,第一次接触,望大牛指导

消褪少年 ⋅ 05/16 ⋅ 0

Atitit webdav大文件上传的解决方案

Atitit webdav大文件上传的解决方案 目录 1.1. 修改本地电脑注册表无效 1 1.2. 只好使用java lib模式了 jackrabbit.webdav 2 2. ref 4 Upload file thro webdav client java api [if !suppor...

ati艾龙AttilaxAkb ⋅ 06/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

6. Shell 函数 和 定向输出

Shell 常用函数 简洁:目前没怎么在Shell 脚本中使用过函数,哈哈,不过,以后可能会用。就像java8的函数式编程,以后获取会用吧,行吧,那咱们简单的看一下具体的使用 Shell函数格式 linux ...

AHUSKY ⋅ 7分钟前 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

OSC_cnhwTY ⋅ 14分钟前 ⋅ 0

单片机软件定时器

之前写了一个软件定时器,发现不够优化,和友好,现在重写了 soft_timer.h #ifndef _SOFT_TIMER_H_#define _SOFT_TIMER_H_#include "sys.h"typedef void (*timer_callback_function)(vo...

猎人嘻嘻哈哈的 ⋅ 16分钟前 ⋅ 0

好的资料搜说引擎

鸠摩搜书 简介:鸠摩搜书是一个电子书搜索引擎。它汇集了多个网盘和电子书平台的资源,真所谓大而全。而且它还支持筛选txt,pdf,mobi,epub、azw3格式文件。还显示来自不同网站的资源。对了,...

乔三爷 ⋅ 24分钟前 ⋅ 0

Debian下安装PostgreSQL的表分区插件pg_pathman

先安装基础的编译环境 apt-get install build-essential libssl1.0-dev libkrb5-dev 将pg的bin目录加入环境变量,主要是要使用 pg_config export PATH=$PATH:/usr/lib/postgresql/10/bin 进......

玛雅牛 ⋅ 25分钟前 ⋅ 0

inno安装

#define MyAppName "HoldChipEngin" #define MyAppVersion "1.0" #define MyAppPublisher "Hold Chip, Inc." #define MyAppURL "http://www.holdchip.com/" #define MyAppExeName "HoldChipE......

backtrackx ⋅ 54分钟前 ⋅ 0

Linux(CentOS)下配置php运行环境及nginx解析php

【part1:搭建php环境】 1.选在自己需要安装的安装包版本,wget命令下载到服务器响应目录 http://php.net/releases/ 2.解压安装包 tar zxf php-x.x.x 3.cd到解压目录执行如下操作 cd ../php-...

硅谷课堂 ⋅ 今天 ⋅ 0

Nginx服务架构初探(四):nginx服务器的rewrite功能

nginx服务器的rewrite功能 1.nginx后端服务器组的配置 1>upstream name {…} name是给服务器组限的组名 2>server address [parameters]; address为服务器地址 parame......

余温灬未存 ⋅ 今天 ⋅ 0

layer.prompt使文本框为空的情况下也能点击确定

最近一直在使用layui,但是用到弹出层layer.prompt时,如果文本框是空的话点击确定没有反应,不能向下执行。 但是我又需要空值,看看我原来的代码。 123456789 layer.prompt...

孟飞阳 ⋅ 今天 ⋅ 0

Linux普通文件压缩工具gzip、Bzip2、xz

第六章 文件压缩和打包 6.1 压缩打包介绍 Linux环境常见压缩文件类型: .zip,.gz,.bz2,.xz, .tar.gz,.tar.bz2,.tar.xz 压缩打包的目的 方便文件传输 节省磁盘空间 减少传输花费的时间 ...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部