HttpTool.java

HttpTool.java

该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用.

package kingtool;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
/**
 * http post发送工具
 * @author King
 *
 */
public class HttpTool {
    public static void main(String[] args) throws Exception {
        String requestUrl = "http://10.15.22.120:9999/httpserver";
        String requestData = readStringFromFile("C:\\Users\\King\\Desktop\\connectANSI.xml","GBK");//有乱码,请修改指定编码
        //_________________________________________________________________________________________
        String returnData=HttpTool.sendRequestData("telesales",requestData, requestUrl,"GBK","GBK", 3000,3000);//大家最终只要使用这一句代码就可调用
        //_________________________________________________________________________________________
    }

    /**
     * 发送报文
     *
     * @param appName 应用系统英文名
     * @param requestData 请求报文
     * @param urlStr    请求地址
     * @param connectionTimeout 链接超时时间  1000代表 1秒
     * @param readTimeout 读取超时时间 1000代表1秒
     * @return
     * @throws IOException
     * @author King
     */
    public static String sendRequestData(String appName,String requestData, String urlStr,String sendEncoding,String recvEncoding, int connectionTimeout,int readTimeout) throws IOException{
        URL url = null;
        HttpURLConnection conn = null;
        ByteArrayOutputStream byteOut = null;
        BufferedReader readInfo = null;
        StringBuffer strBuilder=new StringBuffer();
        OutputStream out = null;
        try {
            System.out.println("请求时间:【"+new Date()+"】");
            System.out.println("请求地址:【"+urlStr+"】");
            System.out.println("请求报文:【"+requestData+"】");
            url = new URL(urlStr);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("SOAPAction", "\"\"");
            conn.setRequestProperty("Accept", "application/soap+xml, application/dime, multipart/related, text/*");
            //如果没有下面这一行代码,服务器端可以通过request.getParameter()和request.getInputStream()都接收到相同信息
            //conn.setRequestProperty("content-type", "text/xml;charset=GBK");
            //如果    有上面这一行代码,服务器端仅能通过request.getInputStream()接收信息
            conn.setRequestProperty("User-Agent", "Axis/1.4");
            conn.setRequestProperty("Cache-Control", "no-cache");
            conn.setRequestProperty("appName", appName);//各系统需要设置应用系统名 appName,如电销为telesales
            conn.setUseCaches(false); //忽略缓存
            conn.setDoOutput(true); //使用 URL 连接进行输出
            conn.setDoInput(true); //使用 URL 连接进行输入
            conn.setConnectTimeout(connectionTimeout);//链接超时
            conn.setReadTimeout(readTimeout);//读取超时
            conn.connect();//建立链接
            byteOut = new ByteArrayOutputStream();
            byteOut.write(requestData.getBytes(sendEncoding));//以指定编码发送,如果有乱码,修改之
            byte[] buf = byteOut.toByteArray();
            out = conn.getOutputStream();
            out.write(buf);
            out.flush();
            if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {//正确返回
                readInfo = new BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),recvEncoding));//以指定编码读取返回信息,如果有乱码,修改之
                String line = null;
                while ((line = readInfo.readLine()) != null) {
                    strBuilder.append(line);
                }
            } else {//没有正确返回
                readInfo = new BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),recvEncoding));//以指定编码读取返回信息,如果有乱码,修改之
                System.out.println("出现异常,返回报文:【"+readInfo+"】");
                throw new IOException("url请求出现问题,返回编码:" + conn.getResponseCode());
            }
            System.out.println("返回时间:【"+new Date()+"】");
            System.out.println("返回报文:【"+strBuilder.toString()+"】");
        } catch (UnsupportedEncodingException e) {
            throw e;
        } catch (MalformedURLException e) {
            throw e;
        } catch (IOException e) {
            throw e;
        }finally {
            try{
                if (readInfo != null) {
                    readInfo.close();
                }
                if (byteOut != null) {
                    byteOut.close();
                }
                if (out != null) {
                    out.close();
                }
                if (conn != null) {
                    conn.disconnect();
                }
            }catch(Exception e){
                System.out.println("关闭链接出错!"+e.getMessage());
            }

        }
        return strBuilder.toString();
    }

    /**
     *
     * @param filePath 文件绝对路径
     * @param encoding 读取文件的编码
     * @return
     * @author King
     * @throws Exception
     */
    public static String readStringFromFile(String filePath,String encoding) {
        File file = new File(filePath);
        System.out.println("文件 "+filePath+"存在与否?: "+ file.exists()+"\n");
        String tempLine = null;
        String retStr = "";
        InputStreamReader isr = null;//way1:
//        FileReader fr = null;//way2
        StringBuilder sb = new StringBuilder();
        try {
            if(file.exists()){
                isr = new InputStreamReader(new FileInputStream(file),encoding);//way1:
//                fr = new FileReader(file);//way2
                BufferedReader br = new BufferedReader(isr);//way1:
//                BufferedReader br =  new BufferedReader(fr);;//way2:
                tempLine = br.readLine();
                while( tempLine != null ){
                    sb.append(tempLine);
                    tempLine = br.readLine();
                }
                retStr = sb.toString();
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try{
                if(isr!=null)
                    isr.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        System.out.println("读到的文件内容如下:");
        System.out.println(retStr+"\n");
        return retStr;
    }
}
时间: 2024-10-10 09:04:41

HttpTool.java的相关文章

[Java]直播方案----[接入环信聊天室]+[腾讯云直播]

辛辛苦苦写的,转载请注明一下,这点信任我想还是有的吧,谢谢了. http://www.cnblogs.com/applerosa/p/7162268.html 之前做了直播,一直没时间写,好不容易闲下来,所以总结记录一下. 需要注意的是,在获取环信聊天室ID和腾讯云三个推/拉流地址的时候,需要先去注册,获取所用开发者账号. 所以这个教程所必须的东西: 1.环信开发者账号; 2.腾讯云开发者账号; 一.做直播,肯定要有一个直播模型,这里我们用直播间来做示例: 这里只是做个基础的演示,所以都是必须的

Java发送http get/post请求,调用接口/方法

由于项目中要用,所以找了一些资料,整理下来. GitHub地址: https://github.com/iamyong    转自:http://blog.csdn.net/capmiachael/article/details/51833531 例1:使用 HttpClient (commons-httpclient-3.0.jar 1 import java.io.ByteArrayInputStream; 2 import java.io.ByteArrayOutputStream; 3

JAVA实现微信支付V3

相信很多的码友在项目中都需要接入微信支付,虽说微信支付已成为一个普遍的现象,但是接入的过程中难免会遇到各种各样的坑,这一点支付宝的SDK就做的很好,已经完成的都知道了. 下面就开始我们的代码之旅,这里我将给大家提供两种支付一个是微信公众号支付,一个是APP微信支付. 一 微信公众号支付 流程: 1.获取用户openid 2.获取token,注意获取的token是有时效的而且接口是有获取上线,具体看微信API文档 3.拿商品信息(金额,名字等)去请求统一下单接口 4.统一下单接口获取预支付ID,后

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 1 2 3 4 5 6 7 new Thread(new

由@NotNull 注解引出的关于Java空指针的控制(转)

Java 小技巧和在java应用避免NullPonintException的最佳方法 在java应用程序中,一个NullPonintException(空指针异常)是最好解决(问题)的方法.同时,空指针也是写健壮的顺畅运行的代码的关键.“预防好过治疗”这句话也同样适用于令人不爽的NullPonintException.通过应用防御性的编码技术和在遵守多个部分之间的约定,你可以再很大程度上避免NullPointException.下面的这些java小技巧可以最小化像!=null这种检查的代码.作为

Java注解(2)-注解处理器(运行时|RetentionPolicy.RUNTIME)

如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用.读取注解的工具叫作注解处理器.Java提供了两种方式来处理注解:第一种是利用运行时反射机制:另一种是使用Java提供的API来处理编译期的注解. 反射机制方式的注解处理器 仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.下面结合例子来说明这种方式的处理方法. Java中的反射API(如java.lang.Class.java.lang.reflect.Field等)都实现了接

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个