zoukankan      html  css  js  c++  java
  • java远程工具类

    package com.zdz.httpclient;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpException;
    import org.apache.commons.httpclient.NameValuePair;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.apache.commons.httpclient.methods.PostMethod;
    
    /**
     * HttpClient 测试类,提供get post方法实例
     * @author zdz8207
     *
     */
    public class HttpClientTest {
        private static final String URL = "http://www.163.com";
        private static final int PORT = 80;
    
        public static void main(String[] args) throws Exception {
            //测试get方法
            doGetMethod(URL,PORT);
            //测试post方法
            String posturl = "http://mail.163.com/";
            doPostMethod(posturl,PORT);
        }
    
        /**
         * http get 方法
         * @param url
         * @param port
         * @throws HttpException
         * @throws IOException
         * @return bodystring
         */
        public static String doGetMethod(String url,int port) throws HttpException, IOException {
            HttpClient client = new HttpClient();
            // 设置代理服务器地址和端口
            client.getHostConfiguration().setHost(url, port);
            // 使用 GET 方法
            GetMethod method = new GetMethod(url);
            //执行请求
            client.executeMethod(method);
    
            // 打印服务器返回的状态
            System.out.println(method.getStatusLine());
            // 打印返回的信息
    //        System.out.println(method.getResponseBodyAsString());
            // response body of large or unknown size. Using getResponseBodyAsStream instead is recommended. 
            InputStream bodystreams = method.getResponseBodyAsStream();
            String body = convertStreamToString(bodystreams);
            System.out.println(body);
            // 释放连接
            method.releaseConnection();
            
            return body;
        }
        
        /**
         * http post 方法
         * @param url
         * @param port
         * @throws HttpException
         * @throws IOException
         * @return bodystring
         */
        public static String doPostMethod(String url,int port) throws HttpException, IOException {
            HttpClient client = new HttpClient();
            // 设置代理服务器地址和端口
            client.getHostConfiguration().setHost(url, port);
            // 使用POST方法
            PostMethod method = new PostMethod(url);
            //设置传递参数
            NameValuePair agent = new NameValuePair("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows 2000)");
            NameValuePair username = new NameValuePair("email", "xxx@163.com");
            NameValuePair password = new NameValuePair("password", "xxxxxx");
            method.setRequestBody(new NameValuePair[] { agent, username, password });
            //执行请求
            client.executeMethod(method);
    //        设置cookies
    //        Cookie[] cookies = client.getState().getCookies();
    //        client.getState().addCookies(cookies);
            
            // 打印服务器返回的状态
            System.out.println(method.getStatusLine());
            // 打印返回的信息
    //        System.out.println(method.getResponseBodyAsString());
            // response body of large or unknown size. Using getResponseBodyAsStream instead is recommended. 
            InputStream bodystreams = method.getResponseBodyAsStream();
            String body = convertStreamToString(bodystreams);
            System.out.println(body);
            // 释放连接
            method.releaseConnection();
            
            return body;
        }
        
        /**
         * 把InputStream 转换成String返回
         * @param is InputStream
         * @return String
         * @throws UnsupportedEncodingException
         */
        public static String convertStreamToString(InputStream is) throws UnsupportedEncodingException {    
    //        BufferedReader reader = new BufferedReader(new InputStreamReader(is));//输出的中文乱码
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf8")); //GBK
            StringBuilder sb = new StringBuilder();    
            String line = null;    
            try {    
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "
    ");    
                }    
            } catch (IOException e) {    
                e.printStackTrace();    
            } finally {    
                try {    
                    is.close();    
                } catch (IOException e) {    
                   e.printStackTrace();    
                }    
            }    
            return sb.toString();    
        }
    
    }
    package com.zdz.httpclient;
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.SocketTimeoutException;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    import javax.imageio.ImageIO;
    import javax.imageio.ImageReader;
    import javax.imageio.stream.ImageInputStream;
    
    public class HttpPostUtil {
        URL url;
        HttpURLConnection conn;
        String boundary = "--------httppost123";
        Map<String, String> textParams = new HashMap<String, String>();
        Map<String, File> fileparams = new HashMap<String, File>();
        DataOutputStream ds;
    
        public HttpPostUtil(String url) throws Exception {
            this.url = new URL(url);
        }
        //重新设置要请求的服务器地址,即上传文件的地址。
        public void setUrl(String url) throws Exception {
            this.url = new URL(url);
        }
        //增加一个普通字符串数据到form表单数据中
        public void addTextParameter(String name, String value) {
            textParams.put(name, value);
        }
        //增加一个文件到form表单数据中
        public void addFileParameter(String name, File value) {
            fileparams.put(name, value);
        }
        // 清空所有已添加的form表单数据
        public void clearAllParameters() {
            textParams.clear();
            fileparams.clear();
        }
        // 发送数据到服务器,返回一个字节包含服务器的返回结果的数组
        public byte[] send() throws Exception {
            initConnection();
            try {
                conn.connect();
            } catch (SocketTimeoutException e) {
                // something
                throw new RuntimeException();
            }
            ds = new DataOutputStream(conn.getOutputStream());
            writeFileParams();
            writeStringParams();
            paramsEnd();
            InputStream in = conn.getInputStream();
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            int b;
            while ((b = in.read()) != -1) {
                out.write(b);
            }
            conn.disconnect();
            return out.toByteArray();
        }
        //文件上传的connection的一些必须设置
        private void initConnection() throws Exception {
            conn = (HttpURLConnection) this.url.openConnection();
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setConnectTimeout(10000); //连接超时为10秒
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
            
            
        }
        //普通字符串数据
        private void writeStringParams() throws Exception {
            Set<String> keySet = textParams.keySet();
            for (Iterator<String> it = keySet.iterator(); it.hasNext();) {
                String name = it.next();
                String value = textParams.get(name);
                ds.writeBytes("--" + boundary + "
    ");
                ds.writeBytes("Content-Disposition: form-data; name="" + name
                        + ""
    ");
                ds.writeBytes("
    ");
                ds.writeBytes(encode(value) + "
    ");
            }
        }
        //文件数据
        private void writeFileParams() throws Exception {
            Set<String> keySet = fileparams.keySet();
            for (Iterator<String> it = keySet.iterator(); it.hasNext();) {
                String name = it.next();
                File value = fileparams.get(name);
                ds.writeBytes("--" + boundary + "
    ");
                ds.writeBytes("Content-Disposition: form-data; name="" + name
                        + ""; filename="" + encode(value.getName()) + ""
    ");
                ds.writeBytes("Content-Type: " + getContentType(value) + "
    ");
                ds.writeBytes("
    ");
                ds.write(getBytes(value));
                ds.writeBytes("
    ");
            }
        }
        //获取文件的上传类型,图片格式为image/png,image/jpg等。非图片为application/octet-stream
        private String getContentType(File f) throws Exception {
            
    //        return "application/octet-stream";  // 此行不再细分是否为图片,全部作为application/octet-stream 类型
            ImageInputStream imagein = ImageIO.createImageInputStream(f);
            if (imagein == null) {
                return "application/octet-stream";
            }
            Iterator<ImageReader> it = ImageIO.getImageReaders(imagein);
            if (!it.hasNext()) {
                imagein.close();
                return "application/octet-stream";
            }
            imagein.close();
            return "image/" + it.next().getFormatName().toLowerCase();//将FormatName返回的值转换成小写,默认为大写
    
        }
        //把文件转换成字节数组
        private byte[] getBytes(File f) throws Exception {
            FileInputStream in = new FileInputStream(f);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            byte[] b = new byte[1024];
            int n;
            while ((n = in.read(b)) != -1) {
                out.write(b, 0, n);
            }
            in.close();
            return out.toByteArray();
        }
        //添加结尾数据
        private void paramsEnd() throws Exception {
            ds.writeBytes("--" + boundary + "--" + "
    ");
            ds.writeBytes("
    ");
        }
        // 对包含中文的字符串进行转码,此为UTF-8。服务器那边要进行一次解码
        private String encode(String value) throws Exception{
            return URLEncoder.encode(value, "UTF-8");
        }
        
        
        @SuppressWarnings("unused")
        private String dyfsjk(String url,Map<String, String> map1,Map<String, File> map2){
            URL ycurl=null ;
            HttpURLConnection  conn =null ;
            DataOutputStream ds = null ;
            String boundary = "--------httppost123";
            String result = null ;
            try {
                ycurl= new URL(url);
                conn = (HttpURLConnection)ycurl.openConnection();
                conn.setDoOutput(true);
                conn.setUseCaches(false);
                conn.setConnectTimeout(10000); //连接超时为10秒
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary);
                conn.connect();
                ds= new DataOutputStream(conn.getOutputStream());
                Set<String> keySet = map2.keySet();
                for (Iterator<String> it = keySet.iterator(); it.hasNext();) {
                    String name = it.next();
                    File value = map2.get(name);
                    ds.writeBytes("--" + boundary + "
    ");
                    ds.writeBytes("Content-Disposition: form-data; name="" + name
                            + ""; filename="" + URLEncoder.encode(value.getName(), "UTF-8") + ""
    ");
                    ds.writeBytes("Content-Type: " + getContentType(value) + "
    ");
                    ds.writeBytes("
    ");
                    ds.write(getBytes(value));
                    ds.writeBytes("
    ");
                }
                Set<String> keySet2 = map1.keySet();
                for (Iterator<String> it = keySet2.iterator(); it.hasNext();) {
                    String name = it.next();
                    String value = map1.get(name);
                    ds.writeBytes("--" + boundary + "
    ");
                    ds.writeBytes("Content-Disposition: form-data; name="" + name
                            + ""
    ");
                    ds.writeBytes("
    ");
                    ds.writeBytes(URLEncoder.encode(value, "UTF-8") + "
    ");
                }
                ds.writeBytes("--" + boundary + "--" + "
    ");
                ds.writeBytes("
    ");
                InputStream in = conn.getInputStream();
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                int b;
                while ((b = in.read()) != -1) {
                    out.write(b);
                }
                conn.disconnect();
                
                byte[] b1 = out.toByteArray();
                result = new String(b1,"UTF-8");
                
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return result;
        }
        
        
        public static void main(String[] args) throws Exception {
            HttpPostUtil u = new HttpPostUtil("http://192.168.0.13:31415/g/shanghaiTest/");
    /*        u.addFileParameter("image", new File("C:/1e2b33ab-156f-4272-889a-7b35b5dedb31.jpg"));
            u.addTextParameter("tag", "aaaaaaaaa");
            u.addTextParameter("tag", "aaaaaaaaa");
            u.addTextParameter("MD5", "20be0ce11fcc2f9ca76f8a8487cf57d9");
            byte[] b = u.send();
            String result = new String(b,"UTF-8");
    //        result = java.net.URLDecoder.decode(result,"UTF-8");
            System.out.println(result);*/
            Map<String, String> map1 = new HashMap<String, String>();
            map1.put("group", "shanghaiTest");
            map1.put("limit", "3");
            Map<String, File> map2 = new HashMap<String, File>();
            map2.put("image", new File("C:/1e2b33ab-156f-4272-889a-7b35b5dedb31.jpg"));
            String result1 = u.dyfsjk("http://192.168.0.13:31415/search", map1, map2);
            System.out.println(result1);
             
        }
        
        
        
    
    }
    package com.zdz.httpclient;
    
    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import javax.activation.MimetypesFileTypeMap;
    
    /**
     * java通过模拟post方式提交表单实现图片上传功能实例
     * 其他文件类型可以传入 contentType 实现
     * @author zdz8207
     * {@link http://www.cnblogs.com/zdz8207/}
     * @version 1.0
     */
    public class HttpUploadFile {
    
        public static void main(String[] args) {
            testUploadImage();
        }
        
        /**
         * 测试上传png图片
         * 
         */
        public static void testUploadImage(){
            String url = "http://192.168.0.13:31415/g/shanghaiTest/";
            String fileName = "C:/1e2b33ab-156f-4272-889a-7b35b5dedb31.jpg";
            Map<String, String> textMap = new HashMap<String, String>();
            //可以设置多个input的name,value
            textMap.put("name", "testname");
            textMap.put("type", "2");
            //设置file的name,路径
            Map<String, String> fileMap = new HashMap<String, String>();
            fileMap.put("upfile", fileName);
            String contentType = "";//image/png
            String ret = formUpload(url, textMap, fileMap,contentType);
            System.out.println(ret);
            //{"status":"0","message":"add succeed","baking_url":"group1/M00/00/A8/CgACJ1Zo-LuAN207AAQA3nlGY5k151.png"}
        }
    
        /**
         * 上传图片
         * @param urlStr
         * @param textMap
         * @param fileMap
         * @param contentType 没有传入文件类型默认采用application/octet-stream
         * contentType非空采用filename匹配默认的图片类型
         * @return 返回response数据
         */
        @SuppressWarnings("rawtypes")
        public static String formUpload(String urlStr, Map<String, String> textMap,
                Map<String, String> fileMap,String contentType) {
            String res = "";
            HttpURLConnection conn = null;
            // boundary就是request头和上传文件内容的分隔符
            String BOUNDARY = "---------------------------123821742118716"; 
            try {
                URL url = new URL(urlStr);
                conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(30000);
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Connection", "Keep-Alive");
                conn.setRequestProperty("User-Agent",
                        "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
                conn.setRequestProperty("Content-Type",
                        "multipart/form-data; boundary=" + BOUNDARY);
                OutputStream out = new DataOutputStream(conn.getOutputStream());
                // text
                if (textMap != null) {
                    StringBuffer strBuf = new StringBuffer();
                    Iterator iter = textMap.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry entry = (Map.Entry) iter.next();
                        String inputName = (String) entry.getKey();
                        String inputValue = (String) entry.getValue();
                        if (inputValue == null) {
                            continue;
                        }
                        strBuf.append("
    ").append("--").append(BOUNDARY)
                                .append("
    ");
                        strBuf.append("Content-Disposition: form-data; name=""
                                + inputName + ""
    
    ");
                        strBuf.append(inputValue);
                    }
                    out.write(strBuf.toString().getBytes());
                }
                // file
                if (fileMap != null) {
                    Iterator iter = fileMap.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry entry = (Map.Entry) iter.next();
                        String inputName = (String) entry.getKey();
                        String inputValue = (String) entry.getValue();
                        if (inputValue == null) {
                            continue;
                        }
                        File file = new File(inputValue);
                        String filename = file.getName();
                        
                        //没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream
                        contentType = new MimetypesFileTypeMap().getContentType(file);
                        //contentType非空采用filename匹配默认的图片类型
                        if(!"".equals(contentType)){
                            if (filename.endsWith(".png")) {
                                contentType = "image/png"; 
                            }else if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".jpe")) {
                                contentType = "image/jpeg";
                            }else if (filename.endsWith(".gif")) {
                                contentType = "image/gif";
                            }else if (filename.endsWith(".ico")) {
                                contentType = "image/image/x-icon";
                            }
                        }
                        if (contentType == null || "".equals(contentType)) {
                            contentType = "application/octet-stream";
                        }
                        StringBuffer strBuf = new StringBuffer();
                        strBuf.append("
    ").append("--").append(BOUNDARY)
                                .append("
    ");
                        strBuf.append("Content-Disposition: form-data; name=""
                                + inputName + ""; filename="" + filename
                                + ""
    ");
                        strBuf.append("Content-Type:" + contentType + "
    
    ");
                        out.write(strBuf.toString().getBytes());
                        DataInputStream in = new DataInputStream(
                                new FileInputStream(file));
                        int bytes = 0;
                        byte[] bufferOut = new byte[1024];
                        while ((bytes = in.read(bufferOut)) != -1) {
                            out.write(bufferOut, 0, bytes);
                        }
                        in.close();
                    }
                }
                byte[] endData = ("
    --" + BOUNDARY + "--
    ").getBytes();
                out.write(endData);
                out.flush();
                out.close();
                // 读取返回数据
                StringBuffer strBuf = new StringBuffer();
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        conn.getInputStream()));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    strBuf.append(line).append("
    ");
                }
                res = strBuf.toString();
                reader.close();
                reader = null;
            } catch (Exception e) {
                System.out.println("发送POST请求出错。" + urlStr);
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    conn.disconnect();
                    conn = null;
                }
            }
            return res;
        }
    }
  • 相关阅读:
    VMware ESXi 和 VMware Server 有区别
    安装源与清除缓存
    pip install --upgrade pip
    Linux/Centos查看进程占用内存大小的几种方法总结
    top命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令。 按 q 退出
    Centos 查看 CPU 核数 和 型号 和 主频
    Docker 运行ELK日志监测系统,汉化Kibana界面
    elasticsearch启动时遇到的错误
    kubernetes 创建超级管理员和密匙
    第七章 AOP(待续)
  • 原文地址:https://www.cnblogs.com/vitre/p/5711443.html
Copyright © 2011-2022 走看看