`
tangkuo
  • 浏览: 100526 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

HttpXmlClient

阅读更多
/**
* Copyright (c) 2011-2015 All Rights Reserved.
*/
package com.kame.micropay.netbank.service.adapter.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
//import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.kame.micropay.netbank.service.util.ObjectUtils;

/**
*
*
* @author
* @version $Id: HttpXmlClient.java 2015年10月28日 下午3:18:14 $
*/
@SuppressWarnings("deprecation")
public class HttpXmlClient {

private final static Logger log = LoggerFactory.getLogger(HttpXmlClient.class);

public static String postGB18030(String url, Map<?,?> paramMap) {
return post(url, paramMap, "GB18030");
}

public static String post(String url, Map<?,?> params, String toFilePath, String charsetName) {
if (StringUtils.isEmpty(url) || ObjectUtils.isEmpty(params)
|| StringUtils.isEmpty(toFilePath)) {
log.info("post the to file Path null.");
return "";
}
HttpClient httpClient = new HttpClient();
httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT,"Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");

PostMethod method = new PostMethod(url);
Iterator<?> it = params.keySet().iterator();
while (it.hasNext()) {
Object key = it.next();
Object o = params.get(key);
if (o != null && o instanceof String) {
method.addParameter(new NameValuePair(key.toString(), o.toString()));
}
if (o != null && o instanceof String[]) {
String[] s = (String[]) o;
if (s != null){
for (int i = 0; i < s.length; i++) {
method.addParameter(new NameValuePair(key.toString(), s[i]));
}
}
}
}
try {
int statusCode = httpClient.executeMethod(method);
log.info(method.getStatusLine().toString());
log.info("httpClientUtils:statusCode="+statusCode);
if (statusCode == HttpStatus.SC_OK) {
InputStream instream = method.getResponseBodyAsStream();
org.apache.commons.httpclient.Header contentHeader = method.getResponseHeader("Content-Disposition");
        String filename = ""; 
        if (contentHeader != null) { 
        org.apache.commons.httpclient.HeaderElement[] values = contentHeader.getElements(); 
            if (values.length == 1) {
            org.apache.commons.httpclient.NameValuePair param = values[0].getParameterByName("filename"); 
                if (param != null) { 
                    try { 
                        filename = param.getValue(); 
                    } catch (Exception e) { 
                        log.error(e.getMessage(), e);
                    } 
                } 
            } 
        }
        toFilePath = toFilePath + filename;
                FileOutputStream fos = null;
                try {
                    // 创建文件对象 
                File f = new File(toFilePath); 
                    // 创建文件路径 
                    if (!f.getParentFile().exists()) 
                        f.getParentFile().mkdirs(); 
                    // 写入文件 
                    BufferedInputStream in=new BufferedInputStream(instream);
                    fos = new FileOutputStream(new File(toFilePath));
    byte[] inputByte = new byte[1024];
    int length=0;
    while((length=in.read(inputByte,0,inputByte.length))>0){
    fos.write(inputByte,0,length);
    fos.flush();
    }
                } catch (Exception e) { 
                    log.error("保存文件错误,path=" + toFilePath + ",url=" + url, e); 
                } finally { 
                    try { 
                        if (fos != null) fos.close(); 
                    } catch (Exception e) { 
                        log.error("finally BufferedOutputStream shutdown close",e); 
                    } 
                }
}
//content = new String(method.getResponseBody(), code);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
if(method!=null)method.releaseConnection();
method = null;
httpClient = null;
}
return toFilePath;
}

public static String post(String url, Map<?,?> paramMap, String charsetName) {
String content = StringUtils.EMPTY;
if(StringUtils.isEmpty(url) || ObjectUtils.isEmpty(paramMap)){
return content;
}
HttpClient httpClient = new HttpClient();
httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT,"Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");

PostMethod method = new PostMethod(url);
Iterator<?> it = paramMap.keySet().iterator();
while (it.hasNext()) {
Object key = it.next();
Object o = paramMap.get(key);
if (o != null && o instanceof String) {
method.addParameter(new NameValuePair(key.toString(), o.toString()));
}
if (o != null && o instanceof String[]) {
String[] s = (String[]) o;
if (s != null){
for (int i = 0; i < s.length; i++) {
method.addParameter(new NameValuePair(key.toString(), s[i]));
}
}
}
}
try {
int statusCode = httpClient.executeMethod(method);
log.info(method.getStatusLine().toString());
log.info("httpClientUtils::statusCode="+statusCode);
content = new String(method.getResponseBody(), charsetName);
} catch (Exception e) {
log.error("time out");
log.error(e.getMessage(), e);
} finally {
if(method!=null)method.releaseConnection();
method = null;
httpClient = null;
}
return content;
}
/**
* POST方式发送
* @param url
* @param params
* @return
*/
public static String post(String url, Map<String, String> params) {
DefaultHttpClient httpclient = new DefaultHttpClient();
String body = null;

log.info("create httppost:" + url);
HttpPost post = postForm(url, params);

body = invoke(httpclient, post);

httpclient.getConnectionManager().shutdown();

return body;
}

public static String get(String url, String toFileDir, String charsetName) {
HttpClient httpClient = new HttpClient();
GetMethod getMethod = new GetMethod(url);
try {
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode == HttpStatus.SC_OK) {
InputStream instream = getMethod.getResponseBodyAsStream();
org.apache.commons.httpclient.Header contentHeader = getMethod.getResponseHeader("Content-Disposition");
        String filename = ""; 
        if (contentHeader != null) {
        org.apache.commons.httpclient.HeaderElement[] values = contentHeader.getElements(); 
            if (values.length == 1) {
            org.apache.commons.httpclient.NameValuePair param = values[0].getParameterByName("filename"); 
                if (param != null) {
                filename = param.getValue(); 
                } 
            } 
        }
        if (StringUtils.isEmpty(filename)) {
        return new String(getMethod.getResponseBody(), charsetName);
        }
        toFileDir += filename;
                FileOutputStream fos = null;
                try {
                    // 创建文件对象 
                File f = new File(toFileDir); 
                    // 创建文件路径 
                    if (!f.getParentFile().exists()) 
                        f.getParentFile().mkdirs(); 
                    // 写入文件 
                    BufferedInputStream in=new BufferedInputStream(instream);
                    fos = new FileOutputStream(f);
    byte[] inputByte = new byte[1024];
    int length=0;
    while((length=in.read(inputByte,0,inputByte.length))>0){
    fos.write(inputByte,0,length);
    fos.flush();
    }
                } catch (Exception e) { 
                    log.error("保存文件错误,path=" + toFileDir + ",url=" + url, e); 
                } finally {
                IOUtils.closeQuietly(fos);
                }
}
} catch (IOException e) {
log.error("保存文件错误:" + e.getMessage(), e); 
} finally {
if(getMethod != null) {
getMethod.releaseConnection();
}
getMethod = null;
httpClient = null;
}
return toFileDir;
}

/**
* get 方式发送
* @param url
* @return
*/
public static String get(String url) {
DefaultHttpClient httpclient = new DefaultHttpClient();
String body = null;

log.info("create httppost:" + url);
HttpGet get = new HttpGet(url);
body = invoke(httpclient, get);

httpclient.getConnectionManager().shutdown();

return body;
}


private static String invoke(DefaultHttpClient httpclient,
HttpUriRequest httpost) {

HttpResponse response = sendRequest(httpclient, httpost);
String body = paseResponse(response);

return body;
}

private static String paseResponse(HttpResponse response) {
log.info("get response from http server..");
HttpEntity entity = response.getEntity();

log.info("response status: " + response.getStatusLine());
String charset = EntityUtils.getContentCharSet(entity);
log.info(charset);

String body = null;
try {
body = EntityUtils.toString(entity);
log.info(body);
} catch (ParseException e) {
log.error(e.getMessage(),e);
} catch (IOException e) {
log.error(e.getMessage(),e);
}

return body;
}

private static HttpResponse sendRequest(DefaultHttpClient httpclient,
HttpUriRequest httpost) {
log.info("execute post...");
HttpResponse response = null;

try {
response = httpclient.execute(httpost);
} catch (ClientProtocolException e) {
log.error(e.getMessage(),e);
} catch (IOException e) {
log.error(e.getMessage(),e);
}
return response;
}

private static HttpPost postForm(String url, Map<String, String> params){

HttpPost httpost = new HttpPost(url);
List<org.apache.http.NameValuePair> nvps = new ArrayList <org.apache.http.NameValuePair>();

Set<String> keySet = params.keySet();
for(String key : keySet) {
nvps.add(new BasicNameValuePair(key, params.get(key)));
}

try {
log.info("set utf-8 form entity to httppost");
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}

return httpost;
}
}



分享到:
评论

相关推荐

    http over xml的实例

    在"HttpXmlServer"和"HttpXmlClient"这两个文件中,我们可以预见到以下操作: 1. **HttpXmlServer**:服务器端会使用XStream将Java对象转换为XML字符串,然后通过HttpClient发送给客户端。可能还会包含监听特定端口...

    httpclient需要的各种jar包

    httpclient需要的各种jar包 commons-codec-1.7.jar commons-httpclient.jar commons-logging-1.1.1.jar httpclient-4.2.2.jar httpcore-4.2.2.jar

    电子商务之价格优化算法:动态定价:动态定价的实施与案例研究.docx

    电子商务之价格优化算法:动态定价:动态定价的实施与案例研究.docx

    VB程序实例-Office或IE风格的工具栏.zip

    基于VB的程序实例,可供参考学习使用

    aggdraw-1.3.14-cp39-cp39-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    通用模板/素材/样式-100套大数据可视化系统大屏页面(开箱即用)+python源码+演示+文档说明

    包含: 001 服务大数据可视化监管平台 002 水质情况实时监测预警系统 003 联心菜市场数据中心 004 政务大数据共享交换平台 005 可视化监控管理 006 全国疫情实时监控 007 惠民服务平台 009 某公司大数据监控平台 010 双数智慧公卫-传染病督导平台 011 大数据可视化系统数据分析通用模版 012 某公司大数据展示模版 013 某公司大数据展示模版 014 时实客流量监控中心 015 广西矿产资源大数据监管平台 016 某某科技有限公司-生产数据中心 017 大数据可视化通用素材 018 大数据可视化系统数据分析通用模版 等等 - 不懂运行,下载完可以私聊问,可远程教学 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。

    akima-2021.6.6-cp38-cp38-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    使用java实现的简单飞机大战游戏.zip

    本资源提供了使用java实现的简单飞机大战游戏,是一款经典的2D射击游戏。玩家在游戏中控制一架飞机,通过键盘操作移动和发射子弹,击落敌机获得积分。当达到一定积分时,会出现Boss,增加游戏难度。游戏还包含碰撞检测、得分系统以及游戏状态管理等功能。该资源旨在帮助学习者掌握Java编程的各个方面,包括面向对象设计、图形界面编程等。通过这个项目,学习者可以深入理解如何使用Java语言实现一个具备基本功能的小游戏,并学会如何处理游戏中的交互、碰撞检测和动画效果等技术细节。本资源适合Java编程初学者及对游戏开发感兴趣的开发者学习和参考,是提升编程技能和项目经验的绝佳实践材料。

    java毕业设计-基于SSM的新生报到系统【代码+论文+PPT+开题】

    原文链接:https://blog.csdn.net/zsd12379/article/details/143531872 包含功能: 个人中心:提供学生个人信息查看与编辑,以及报到进度跟踪的个性化空间。 管理员管理:实现系统管理员的权限分配、角色管理及操作日志监控。 班级管理:负责班级的创建、成员管理、班级信息更新及班级活动安排。 学院管理:维护学院基本信息,包括学院介绍、专业设置及学院新闻发布。 专业管理:提供专业信息的录入、修改及查询服务,支持专业详细介绍。 消息通知:发送报到流程指导、重要日期提醒及个性化通知给学生。 宿舍管理:分配、调整宿舍,记录宿舍信息及处理宿舍相关申请。 缴费管理:实现在线学费、住宿费等各类费用的缴纳、查询及缴费记录保存。 学生管理:涵盖学生信息的录入、审核、查询及学生状态(如报到状态)的更新。

    SolarWinds数据库性能分析器:监控MySQL数据库性能.docx

    SolarWinds数据库性能分析器:监控MySQL数据库性能.docx

    Toad Data Modeler:Toad数据模型器的插件与扩展.docx

    Toad Data Modeler:Toad数据模型器的插件与扩展.docx

    R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目)

    R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。该项目可以直接作为毕设、期末大作业使用,代码都在里面,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行! R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目)R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目)R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目)R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目)R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目)R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目)R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目)R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目)R语言对白葡萄酒数据集进行数据探索项目源码+文档说明(高分项目)R语言对白葡萄酒数据集进行数据探索项目源码+

    springboot003基于Springboot+Vue的图书个性化推荐系统的设计与实现毕业源码案例设计.zip

    springboot003基于Springboot+Vue的图书个性化推荐系统的设计与实现毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    yolov10预训练模型.rar

    在按照YOLOv10官网上的步骤进行时,运行app.py文件时,如果没有预训练模型的话会报错。解压压缩包里的内容到同级目录下(在requirements.txt文档下面),这样运行后就不会报错。

    #-ssm-043-mysql-口腔护理网站-.zip

    基于SSM的口腔护理网站主要是后台管理类型的系统,但前台和后台独立存在但又相辅相成,前后台访问的是同一个数据库,但是所访问的数据库对象不同。 前台: (1)用户可以匿名浏览网站内容和观看口腔护理的小贴士,但不能评论也不能回复,更不能进行自己健康信息的录入。 (2)医生的注册与登录:口腔科的医生用户们如果想在网站录入自己的个人信息,需要经过一系列的有验证信息的注册,注册成功并登录后,医生可以查看所有的预约信息。 (3)个人中心:用户可以在首页面进行对自己个人信息的查看,以及可以查看自己录入的历史数据。 (4)在线留言:用户可以在网站首页进行在线留言,医生看到后会及时进行回复。 (5)口腔护理预约:用户可以在网站上进行口腔护理的预约。 后台: (1)用户个人信息管理系统:在此系统中维护和新建的用户个人信息,比如说当一个用户的密码被遗漏了,经过对密码提示出现问题的验证就可以直接进行密码的修改。 (2)医生信息的管理功能模块:管理人员可以有效地维护医生信息。 (3)预约信息管理模块:管理员可以随时对网站中的预约信息加以管理维护。 (4)在线留言管理模块:管理员通过账号可以实时管理网站中的留言

    一个Java语言写的俄罗斯方块小游戏。因为作者刚接触Java,正在摸索着学习,代码并非原创,而是跟着别人学习。.zip

    本资源是一个Java语言编写的俄罗斯方块小游戏,旨在帮助初学者通过实战学习Java编程并体验游戏开发的乐趣。项目包含完整的源代码和资源文件,适合计算机相关专业的学生、教师以及企业员工下载学习使用。该项目涵盖了Java编程、GUI设计、事件处理、多线程等多个核心概念,是学习和实践Java技术的好例子。通过阅读和理解源代码,开发者可以提升自己的编程技能,加深对面向对象编程范式的理解。此外,项目经过测试,功能正常,作者的答辩评分高达96分,因此质量得到了验证。用户在下载使用之前应首先查看README.md文件(如果存在),该文件中包含了项目的相关信息和使用说明。需要注意的是,本资源为学习资源,仅供学习和研究目的使用,不得用于商业目的。用户必须遵守相关的法律法规,尊重原创者的劳动成果和知识产权。

    Trustwave DbProtect:DbProtect_高级功能与定制化服务技术教程.docx

    Trustwave DbProtect:DbProtect_高级功能与定制化服务技术教程.docx

    astropy-3.2.3-cp35-cp35m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    VB程序实例-淡入淡出效果.zip

    基于VB的程序实例,可供参考学习使用

    matlab mpc pmsm model

    matlab mpc pmsm model

Global site tag (gtag.js) - Google Analytics