import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;

import net.sf.json.JSONObject;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.SimpleHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.log4j.Logger;

/**
* @Author: 冯崇
* @Version:V1.0
*/
public class HttpRequestUtil {

protected static final Logger log = Logger.getLogger(HttpRequestUtil.class);

/**
* HttpClient 模拟POST请求 方法说明
*
* @Discription:扩展说明
* @param url
* @param params
* @return String
*/
public static String postRequest(String url, Map<String, String> params) {
//构造HttpClient的实例
HttpClient httpClient = new HttpClient();

//创建POST方法的实例
PostMethod postMethod = new PostMethod(url);

//设置请求头信息
postMethod.setRequestHeader("Connection", "close");

//添加参数
for (Map.Entry<String, String> entry : params.entrySet()) {
postMethod.addParameter(entry.getKey(), entry.getValue());
}

//使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次
httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false);

//接收处理结果
String result = null;
try {
//执行Http Post请求
httpClient.executeMethod(postMethod);

//返回处理结果
result = postMethod.getResponseBodyAsString();
} catch (HttpException e) {
// 发生致命的异常,可能是协议不对或者返回的内容有问题
log.error("请检查输入的URL: {}", e);
e.printStackTrace();
} catch (IOException e) {
// 发生网络异常
log.error("发生网络异常: {}", e);
e.printStackTrace();
} finally {
//释放链接
postMethod.releaseConnection();

//关闭HttpClient实例
if (httpClient != null) {
((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown();
httpClient = null;
}
}
return result;
}

/**
* HttpClient 模拟GET请求 方法说明
*
* @Discription:扩展说明
* @param url
* @param params
* @return String
*/
public static String getRequest(String url, Map<String, String> params) {
//构造HttpClient实例
HttpClient client = new HttpClient();

//拼接参数
String paramStr = "";
for (String key : params.keySet()) {
paramStr = paramStr + "&" + key + "=" + params.get(key);
}
paramStr = paramStr.substring(1);
try {
paramStr = URLEncoder.encode(paramStr, "utf-8");
} catch (UnsupportedEncodingException e1) {
log.error("请检查输入的URL: {}", e1);
}
//创建GET方法的实例
GetMethod method = new GetMethod(url + "?" + paramStr);

//接收返回结果
String result = null;
try {
//执行HTTP GET方法请求
client.executeMethod(method);

//返回处理结果
result = method.getResponseBodyAsString();
} catch (HttpException e) {
// 发生致命的异常,可能是协议不对或者返回的内容有问题
log.error("请检查输入的URL: {}", e);
e.printStackTrace();
} catch (IOException e) {
// 发生网络异常
log.error("https请求异常: {}", e);
e.printStackTrace();
} finally {
//释放链接
method.releaseConnection();

//关闭HttpClient实例
if (client != null) {
((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown();
client = null;
}
}
return result;
}

/**
* PSOT方式发送HTTP请求
*
* @param url 请求地址
* @param data 请求参数
*/
public static String post(String url, String data) {
HttpURLConnection http = null;
PrintWriter out = null;
BufferedReader reader = null;
try {
//创建连接
URL urlPost = new URL(url);
http = (HttpURLConnection) urlPost.openConnection();
http.setDoOutput(true);
http.setDoInput(true);
http.setRequestMethod("POST");
http.setUseCaches(false);
http.setInstanceFollowRedirects(true);
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

http.connect();

//POST请求
OutputStreamWriter outWriter = new OutputStreamWriter(http.getOutputStream(), "utf-8");
out = new PrintWriter(outWriter);
out.print(data);
out.flush();
out.close();
out = null;

//读取响应
reader = new BufferedReader(new InputStreamReader(http.getInputStream()));
String lines;
StringBuffer sb = new StringBuffer("");
while ((lines = reader.readLine()) != null) {
lines = new String(lines.getBytes(), "utf-8");
sb.append(lines);
}
reader.close();
reader = null;
// System.out.println(sb.toString());
return sb.toString();
} catch (Exception e) {
// TODO Auto-generated catch block
// e.printStackTrace();
return null;
} finally {
if (null != http) http.disconnect();
if (null != out) out.close();
try {
if (null != reader) reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* PSOT方式发送HTTP请求
*
* @param requestUrl 请求地址
* @param outputStr 请求参数
*/
public static JSONObject httpPostRequest(String requestUrl, String outputStr) {
PostMethod post = new PostMethod(requestUrl);
post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
post.addParameter("para", outputStr);
String info = null;
HttpClient httpclient = new HttpClient();
try {
httpclient.executeMethod(post);
info = new String(post.getResponseBody(), "UTF-8");
} catch (Exception e) {
log.error("https请求异常: {}", e);
}
// System.out.println(info);
return JSONObject.fromObject(info);
}

}

httpclient使用用例的更多相关文章

  1. [转]PROC简单使用用例--VC连接ORACLE

    [转]PROC简单使用用例--VC连接ORACLE 操作系统:windows 7 数据库版本:oracle 10g VS版本:VS2010 前言:连接ORACLE的方式有很多,此处仅以PROC为例,说 ...

  2. UML和模式应用4:初始阶段(6)--迭代方法中如何使用用例

    1.前言 用例是UP和其他众多迭代方法的核心.UP提倡用例驱动开发. 2. 迭代方法中如何使用用例 功能需求首先定义在用例中 用例是迭代计划的重要部分,迭代是通过选择一些用例场景或整个用例来定义的 用 ...

  3. GCOV 使用用例

      1.GCOV查看arm-linux代码覆盖率 一.           关于gcov工具 gcov伴随gcc 发布.gcc编译加入-fprofile-arcs -ftest-coverage 参数 ...

  4. nanosleep() -- 更精确的延迟 -----一个使用用例

    [常规] nanosleep() -- 更精确的延迟 [复制链接]     beyes 4220 主题 5152 帖子 3万 积分 GROAD 曲径通幽,安觅芳踪. 积分 30607 发消息 电梯直达 ...

  5. 在Visual Studio中使用用例图描述参与者与用例的关系

    在"在Visual Studio中使用用例图描述系统与参与者间的关系"中,使用用例图表示参与者与系统的关系,本篇体验参与者与用例(参与者要做的事情)的关系. 首先创建有关Custo ...

  6. 如何让classmethod只允许使用用类对象来调用

    Django REST framework里面有这样一段代码,在网上查@classonlymethod的意思是使得classmethod只允许使用用类对象来调用 @classonlymethod de ...

  7. 尽量少嵌套无用的div;外部文件尽量使用link而不要使用用@import

    最近的工作又学到了很多东西,在这里记录一下. 1,尽量少嵌套无用的div,这个问题领导很严肃的跟我提过很多次,因为我很喜欢用很多div,而且有很多div都是无存在意义的.后来领导给了我一些资料,我看了 ...

  8. 使用用树莓派打造远程WEB服务器

    简介:系统配置Raspberry Pi 3B + Raspbian + MySQL5.7 + Tomcat 9 + Nginx + 公网IP. 工具:Win32DiskImager .FileZill ...

  9. 使用用Generic.xaml加载默认的主题资源

    把Resource嵌入到Generic.xaml文件中,并把该文件放到应用程序的Themes主题文件夹下面,这们Generic.xaml文件中的资源就可以被系统识别为默认主题一部分,从而进行使用. 为 ...

随机推荐

  1. PHP下进行XML操作(创建、读取)

    PHP下可以使用DOMDocument类对XML或者HTML文件进行读写操作 更为简单的方法使用simpleXML类操作XML DOM节点分为 元素节点 属性节点 值节点 注释节点 根节点(docum ...

  2. vue下载和上传excle数据文件,解析excel文件数据并存在数据库中

    下载: VUE: window.open("xxxx/downloadOldTaskDataFile.do_", "_blank"); JAVA: /** * ...

  3. PHP5 的五种常用模式

    PHP5 的五种常用模式. 工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系 ...

  4. mybatis 获取insert返回的主键

    在我们开发过程中,在插入数据到数据库时,很多时候都需要把其主键返回,这里就说一下mybatis是怎么获取的. 其中mysql和oracle是不同的做法,因为mysql本身就提供字段自增的属性,而ora ...

  5. harbor仓库镜像的删除

    harbor仓库镜像的删除 刚开始自己摸索了下,直接webui界面删除后,发现仓库空间未释放 上传之前仓库空间占用为 上传之后仓库空间占用为 在webui界面上删除镜像后 查看大小 依旧为286m,到 ...

  6. openwrt手动wifi设成client模式[笔记]

    说明:刚刷好的OPENWRT,默认是不带luci-web管理的,所以得手工SSH或TELNET上去改WIFI模式,以便通过WIFI连到现有的ROUTER去下载安装luci...: root@OpenW ...

  7. SSH 登录时出现如下错误:Disconnected:No supported authentication methods available

    SSH 登录时出现如下错误:Disconnected:No supported authentication methods available 更新时间:2017-06-07 13:26:11   ...

  8. JS拖拽元素原理及实现代码

    一.拖拽的流程动作 ①鼠标按下②鼠标移动③鼠标松开 二.拖拽流程中对应的JS事件 ①鼠标按下会触发onmousedown事件 ②鼠标移动会触发onmousemove事件 ③鼠标松开会触发onmouse ...

  9. crontab -e文件存放路径

    crontab -e结果存放在/var/spool/cron/crontabs中

  10. Gradle安装和在IDEA使用 基本操作

    阅读目录 简单介绍 安装 使用idea创建一个web的Gradle项目 如何进行打包 解释build.gradle和settings.gradle 有关gradle的jar冲突 本地jar包位置和修改 ...