http请求,普通的get和post方法
在http://www.cnblogs.com/ITtangtang/p/3968093.html的基础上封装了一下get和post请求的常用方法,
虽然很简单,也晒晒
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import java.util.Iterator;
import java.util.Map;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
/**
*
* @author zhang jinguang
* @version $Id: HttpInvoker.java, v 0.1 2016年10月26日 下午2:17:59 zhang jinguang
* Exp $
*/
public class HttpInvoker {
private static Log logger = LogFactory.getLog(HttpInvoker.class);
// 默认字符集编码
private final static String DEFAULT_CHARSET = "utf-8";
// 默认超时时间, 单位为毫秒(ms)
private final static int DEFAULT_TIMEOUT = 10000;
/**
* http的默认get请求,默认超时时间为10s,默认字符集为utf-8,如需定制,请调用
*
* @author zhang jinguang 2016年10月26日
* @param url:get请求的url地址,不要带参数,参数放到params里面
* @param params:请求的url需要的参数, 没有参数,直接传null
* @return
* @throws Exception
*/
public static String httpGet(String url, Map<?, ?> params) throws Exception {
return httpGet(url, params, DEFAULT_TIMEOUT, DEFAULT_CHARSET);
}
/**
* @author zhang jinguang 2016年10月26日
* @param url:get请求的url地址,不要带参数,参数放到params里面
* @param params
* @param timeout
* @param charset
* @return
* @throws Exception
*/
public static String httpGet(String url, Map<?, ?> params, int timeout, String charset) throws Exception {
return invokeGet(url, params, timeout, charset);
}
/**
* http post请求
*
* @author zhang jinguang 2016年10月26日
* @param url:请求的url
* @param params:post的内容
* @return
* @throws Exception
*/
public static String httpPost(String url, Map<?, ?> params) throws Exception {
return httpPost(url, params, DEFAULT_TIMEOUT, DEFAULT_CHARSET);
}
/**
* http post请求
*
* @author zhang jinguang 2016年10月26日
* @param url:请求的url
* @param params:post的内容
* @param timeout:超时时间
* @param charset:字符集
* @return
* @throws Exception
*/
public static String httpPost(String url, Map<?, ?> params, int timeout, String charset) throws Exception {
return invokePost(url, params, timeout, charset);
}
/**
* 实际的post请求
*
* @author zhang jinguang 2016年10月26日
* @param url:请求的url
* @param params:post的内容
* @param timeout:超时时间
* @param charset:字符集
* @return
* @throws Exception
*/
private static String invokePost(String url, Map<?, ?> params, int timeout, String charset) throws Exception {
logger.debug("HTTP调用POST[" + url + "][" + params + "]");
HttpMethod httpMethod = null;
if (params != null && params.size() > 0) {
Iterator<?> paramKeys = params.keySet().iterator();
httpMethod = new PostMethod(url);
NameValuePair[] form = new NameValuePair[params.size()];
int formIndex = 0;
while (paramKeys.hasNext()) {
String key = (String) paramKeys.next();
Object value = params.get(key);
if (value != null && value instanceof String && !value.equals("")) {
form[formIndex] = new NameValuePair(key, (String) value);
formIndex++;
} else if (value != null && value instanceof String[] && ((String[]) value).length > 0) {
NameValuePair[] tempForm = new NameValuePair[form.length + ((String[]) value).length - 1];
for (int i = 0; i < formIndex; i++) {
tempForm[i] = form[i];
}
form = tempForm;
for (String v : (String[]) value) {
form[formIndex] = new NameValuePair(key, (String) v);
formIndex++;
}
}
}
((PostMethod) httpMethod).setRequestBody(form);
}
return executeNetRequest(url, timeout, charset, httpMethod);
}
/**
* 拼接请求参数
*
* @author zhang jinguang 2016年10月26日
* @param url
* @param params
* @param timeout
* @param charset
* @return
* @throws Exception
*/
private static String invokeGet(String url, Map<?, ?> params, int timeout, String charset) throws Exception {
logger.debug("HTTP调用GET[" + url + "][" + params + "]");
HttpMethod httpMethod = null;
// 如果需要拼接请求参数
if (params != null && params.size() > 0) {
Iterator<?> paramKeys = params.keySet().iterator();
StringBuffer getUrl = new StringBuffer(url.trim());
if (url.trim().indexOf("?") > -1) {
if (url.trim().indexOf("?") < url.trim().length() - 1
&& url.trim().indexOf("&") < url.trim().length() - 1) {
getUrl.append("&");
}
} else {
getUrl.append("?");
}
while (paramKeys.hasNext()) {
String key = (String) paramKeys.next();
Object value = params.get(key);
if (value != null && value instanceof String && !value.equals("")) {
getUrl.append(key).append("=").append(value).append("&");
} else if (value != null && value instanceof String[] && ((String[]) value).length > 0) {
for (String v : (String[]) value) {
getUrl.append(key).append("=").append(v).append("&");
}
}
}
if (getUrl.lastIndexOf("&") == getUrl.length() - 1) {
httpMethod = new GetMethod(getUrl.substring(0, getUrl.length() - 1));
} else {
httpMethod = new GetMethod(getUrl.toString());
}
} else {// 没有请求参数
httpMethod = new GetMethod(url);
}
return executeNetRequest(url, timeout, charset, httpMethod);
}
/**
* 执行网络请求
*
* @author zhang jinguang 2016年10月26日
* @param url
* @param timeout
* @param charset
* @param httpMethod
* @return
* @throws SocketTimeoutException
* @throws ConnectException
* @throws Exception
*/
private static String executeNetRequest(String url, int timeout, String charset, HttpMethod httpMethod)
throws SocketTimeoutException, ConnectException, Exception {
HttpClient client = new HttpClient();
client.getParams().setSoTimeout(timeout);
client.getParams().setContentCharset(charset);
String result = "";
try {
client.executeMethod(httpMethod);
result = httpMethod.getResponseBodyAsString();
} catch (SocketTimeoutException e) {
logger.error("连接超时[" + url + "]");
throw e;
} catch (java.net.ConnectException e) {
logger.error("连接失败[" + url + "]");
throw e;
} catch (Exception e) {
logger.error("连接时出现异常[" + url + "]");
throw e;
} finally {
if (httpMethod != null) {
try {
httpMethod.releaseConnection();
} catch (Exception e) {
logger.error("释放网络连接失败[" + url + "]");
throw e;
}
}
}
return result;
}
}
参考博文:http://www.cnblogs.com/ITtangtang/p/3968093.html
http请求,普通的get和post方法的更多相关文章
- ASP模拟POST请求异步提交数据的方法
这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...
- Ajax设置自定义请求头的两种方法
用自定义请求头token为例 方法一 $.ajax({ type: "post", url:"http://127.0.0.1:4564/bsky-app/templat ...
- Spring MVC 3 表单中文提交post请求和get请求乱码问题的解决方法
在spring mvc 3.0 框架中,通过JSP页面.HTML页面以POST方式提交表单时,表单的参数传递到对应的servlet后会出现中文显示乱码的问题.解决办法可采用spring自带的过滤技术, ...
- AJAX跨域请求json数据的实现方法
这篇文章介绍了AJAX跨域请求json数据的实现方法,有需要的朋友可以参考一下 我们都知道,AJAX的一大限制是不允许跨域请求. 不过通过使用JSONP来实现.JSONP是一种通过脚本标记注入的方式, ...
- file_get_contents无法请求https连接的解决方法 php开启curl
file_get_contents无法请求https连接的解决方法 方法1: PHP.ini默认配置下,用file_get_contents读取https的链接,就会如下错误: Warning: fo ...
- React 中的 AJAX 请求:获取数据的方法
React 中的 AJAX 请求:获取数据的方法 React 只是使用 props 和 state 两处的数据进行组件渲染. 因此,想要使用来自服务端的数据,必须将数据放入组件的 props 或 st ...
- SpringMVC的请求转发的三种方法
SpringMVC请求转发的三种方法 首先明白请求转发是一次请求,地址栏不会发生变化,区别于重定向.springmvc环境自行配置. 以下举例中存在如下文件/WEB-INF/pages/success ...
- GET和POST是HTTP请求的两种基本方法,区别是什么!?
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
- 模拟axios的创建[ 实现调用axios()自身发送请求或调用属性的方法发送请求axios.request() ]
1.axios 函数对象(可以作为函数使用去发送请求,也可以作为对象调用request方法发送请求) ❀ 一开始axios是一个函数,但是后续又给它添加上了一些属性[ 方法属性] ■ 举例子(axio ...
随机推荐
- CSS代码片段【图文】
1.垂直对齐 .verticalcenter{ position: relative; top: 50%; -webkit-transform: translateY(-50%); -o-transf ...
- java20
1:递归(理解) (1)方法定义中调用方法本身的现象 举例:老和尚给小和尚讲故事,我们学编程 (2)递归的注意事项: A:要有出口,否则就是死递归 B:次数不能过多,否则内存溢出 C:构造方法不能递归 ...
- 读书笔记<白帽子讲web安全>
2016年3月24日 09:34:32 星期四 ddos攻击: 一种: 随机生成ip, 去建立链接, 由于http/tcp握手协议原理, 发送应答报文时因为ip无效会导致等待重发, 这种行为可以通过电 ...
- Openstack4j 在 Maven 中的构建
什么是 Openstack4j ? OpenStack的官方SDK是基于Python语言的,对于Java程序猿来说,将Python翻译过来未免麻烦.在Openstack官方的Wiki中(戳我直达),我 ...
- 为 placeholder 自定义样式
textarea::-webkit-input-placeholder{ padding: 1em; } textarea::-moz-placeholder{ padding: 1em; } 同理, ...
- Pyqt show和exec的区别
Pyqt中 QDialog show和exec的区别 QDialog的显示有两个函数show()和exec().他们的区别在参考文档上的解释如下: show():显示一个非模式对话框.控制权即刻返回 ...
- 【Java EE 学习 27】【oracle学习第一天】
一.oracle 11g安装的注意事项 1.超级管理员密码设置要符合要求(特别是不能以数字打头),否则在创建数据库的时候会产生ora-00922错误以及ora-28000错误. 解决方法:http:/ ...
- [BI项目记]-搭建代码管理环境之客户端
前面已经介绍了如何搭建代码管理环境的服务器端安装和配置,这里介绍对于客户端的几个场景. 首先对于开发人员来说,可以直接使用Visual Studio来连接,这里主要演示Visual Studio 20 ...
- mac 下 用 glfw3 搭建opengl开发环境
mac 下 用 glfw3 搭建opengl开发环境 下载编译 glfw3 Build Setting 里面, Library Search Paths -> 设置好编译 glfw 库的路径 H ...
- Linux服务器init 5启动图形界面,报错Retrigger failed udev events的解决方法
1.开启linux系统的桌面环境,使用startx未成功,报如下错误: 提示:Retrigger failed udev events [root@ /]# startx xauth: creatin ...