zoukankan      html  css  js  c++  java
  • apache httpclient和fileupload包使用

    package httpclient;
     
    import java.awt.Image;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.ObjectInputStream;
    import java.nio.charset.Charset;
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
     
    import org.apache.commons.httpclient.Cookie;
    import org.apache.commons.httpclient.Header;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpException;
    import org.apache.commons.httpclient.HttpMethod;
    import org.apache.commons.httpclient.HttpStatus;
    import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
    import org.apache.commons.httpclient.NameValuePair;
    import org.apache.commons.httpclient.cookie.CookieSpec;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.commons.httpclient.methods.multipart.FilePart;
    import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
    import org.apache.commons.httpclient.methods.multipart.Part;
    import org.apache.commons.httpclient.methods.multipart.StringPart;
    import org.apache.commons.httpclient.params.HttpMethodParams;
     
    import com.company.project.model.TradePack;
     
    /**
     * @author qince
     *
     */
    public class HttpClientUseDemo {
     
        /**
         * 这个方法最典型的应用,就是用来获取服务器支持哪些HTTP方法。
         * 当然,在HttpClient组件中有一个名称为OptionsMethod的类,支持这种形式的HTTP请求方式,调用OptionsMethod类的getAllowedMethods方法,
         * 就可以很简单地实现上述的典型应用。
         *
         * @author qincd
         * @date Oct 10, 2014 3:27:27 PM
         */
        public static void main(String[] args) {
            // oneSimpleDemo();
    //       loginSystem();
    //      getValidateCodeImage();
    //      executeInMultiThread();
    //      transferObject();
            uploadFile(new File("d:/logs/msp/common-all.log"));
        }
     
        public static void oneSimpleDemo() {
            HttpClient httpClient = new HttpClient();
            // 设置代理
            // httpClient.getHostConfiguration().setProxy(proxyHost, proxyPort);
            HttpMethod getMethod = new GetMethod("http://qincdtest.ematong.com/msp");
            try {
                int httpStatusCode = httpClient.executeMethod(getMethod);
                if (httpStatusCode == HttpStatus.SC_OK) {
                    System.out.println(getMethod.getStatusLine());
                    System.out.println(getMethod.getResponseBodyAsString());
                    System.out.println("+++++++++++++++++++++++++++++++++++++++++");
                    System.out.println("+++++++++++++++++++++++++++++++++++++++++");
                    System.out.println("+++++++++++++++++++++++++++++++++++++++++");
                    InputStream inout = getMethod.getResponseBodyAsStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(
                            inout, Charset.forName("utf-8")));
                    String line = null;
     
                    while ((line = br.readLine()) != null) {
                        System.out.println(line);
                    }
                } else {
                    System.out.println("与远程服务器通讯发生故障");
                }
            } catch (HttpException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                getMethod.releaseConnection();
            }
        }
     
        /**
         * 使用httpclient模拟http请求登录系统
         *
         * @author qincd
         * @date Oct 10, 2014 3:58:44 PM
         */
        public static void loginSystem() {
            HttpClient httpClient = new HttpClient();
            String loginUrl = "http://qincdtest.ematong.com/msp/manage/login";
            PostMethod postMethod = new PostMethod(loginUrl);
            postMethod.addRequestHeader("Content-Type",
                    "application/x-www-form-urlencoded;charset=utf-8");
            NameValuePair usernamePair = new NameValuePair("username", "admin");
            NameValuePair passwordPair = new NameValuePair("password", "123456");
            postMethod.setRequestBody(new NameValuePair[] { usernamePair,
                    passwordPair });
            try {
                int httpStatusCode = httpClient.executeMethod(postMethod);
                System.out.println(httpStatusCode);
                if (httpStatusCode == HttpStatus.SC_OK) {
                    System.out.println(postMethod.getStatusLine());
                    System.out.println(postMethod.getResponseBodyAsString());
                } else if (httpStatusCode == HttpStatus.SC_MOVED_PERMANENTLY
                        || httpStatusCode == HttpStatus.SC_MOVED_TEMPORARILY
                        || httpStatusCode == HttpStatus.SC_TEMPORARY_REDIRECT) {
                    Header locationHeader = postMethod.getResponseHeader("location");
                    String redirectUrl = locationHeader.getValue();
                    System.out.println("页面需要重定向到" + redirectUrl);
                     
                    System.out.println("----重定向页面内容:");
                    GetMethod getMethod = new GetMethod(redirectUrl);
                    httpClient.executeMethod(getMethod);
                    BufferedReader br = new BufferedReader(new InputStreamReader(getMethod.getResponseBodyAsStream(),"utf-8"));
                    String temp = null;
                    while ((temp = br.readLine()) != null) {
                        System.out.println(temp);
                    }
                    getMethod.releaseConnection();
                }
     
                CookieSpec cookieSpec = org.apache.commons.httpclient.cookie.CookiePolicy
                        .getDefaultSpec();
                Cookie[] cookies = cookieSpec.match("qincdtest.ematong.com", 8080,
                        "/", false, httpClient.getState().getCookies());
                if (cookies == null || cookies.length == 0) {
                    System.out.println("No cookie...");
                } else {
                    System.out.println("-----------Cookie------------------");
                    for (Cookie cookie : cookies) {
                        System.out.println(cookie.getName() + ":"
                                + cookie.getValue());
                    }
                }
            } catch (HttpException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                postMethod.releaseConnection();
            }
     
        }
     
        /**
         * 根据验证码图片生成地址得到验证码图片
         *
         * @author qincd
         * @date Oct 10, 2014 4:23:01 PM
         */
        public static void getValidateCodeImage() {
            // 12306登录的验证码图片地址
            String imageUrl = "https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand";
            imageUrl = "http://c.hiphotos.baidu.com/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50%3Bt%3Dgif/sign=8e3ef28e1f950a7b613846966bb809bc/3b87e950352ac65cd20ecfcbf9f2b21193138a7b.jpg";
            HttpClient client = new HttpClient();
            GetMethod postMethod = new GetMethod(imageUrl);
            try {
                int status = client.executeMethod(postMethod);
                if (status == HttpStatus.SC_OK) {
                    InputStream input = postMethod.getResponseBodyAsStream();
                    Image image = ImageIO.read(input);
                    JFrame frame = new JFrame();
                    frame.setSize(500, 300);
                    frame.add(new JLabel("验证码:"));
                    frame.add(new JLabel(new ImageIcon(image)));
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setVisible(true);
                } else {
                    System.out.println("--network error.");
                    System.out.println(postMethod.getStatusLine());
                }
            } catch (HttpException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                postMethod.releaseConnection();
            }
        }
         
        /**
         * 在多线程环境中运行
         *
         * @author qincd
         * @date Oct 10, 2014 4:56:40 PM
         */
        public static void executeInMultiThread() {
            MultiThreadedHttpConnectionManager threadManager = new MultiThreadedHttpConnectionManager();
            HttpClient client = new HttpClient(threadManager);
            GetMethod gm = new GetMethod("http://www.baidu.com");
            try {
                int status = client.executeMethod(gm);
                if (status == HttpStatus.SC_OK) {
                    System.out.println(gm.getStatusLine());
                    System.out.println(gm.getResponseBodyAsString());
                }
            } catch (HttpException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                gm.releaseConnection();
            }
        }
         
        /**
         * 接收一个Object对象
         *
         * @author qincd
         * @date Oct 10, 2014 6:00:34 PM
         */
        public static void transferObject() {
            MultiThreadedHttpConnectionManager manager = new MultiThreadedHttpConnectionManager();
            HttpClient hc = new HttpClient(manager);
            PostMethod pm = new PostMethod("http://qincdtest.ematong.com/rapiddemo/manage/interface/test/77");
            try {
                int status = hc.executeMethod(pm);
                System.out.println(pm.getStatusLine());
                if (status == HttpStatus.SC_OK) {
                    ObjectInputStream ois = new ObjectInputStream(pm.getResponseBodyAsStream());
                    TradePack tradePack = (TradePack) ois.readObject();
                    System.out.println("==========tradePack:");
                    System.out.println("appId:" + tradePack.getAppId());
                    System.out.println("tradeNo:" + tradePack.getTradeNo());
                    System.out.println("tradeTime:" + tradePack.getTradeTime().toLocaleString());
                    System.out.println("myFlowNo:" + tradePack.getMyFlowNo());
                    System.out.println("sign:" + tradePack.getSign());
                }
            } catch (HttpException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } finally {
                pm.releaseConnection();
            }
             
        }
         
        /**
         * 上传文件
         *
         * @author qincd
         * @throws FileNotFoundException
         * @date Oct 10, 2014 6:00:50 PM
         */
        public static void uploadFile(File file) {
            HttpClient hc = new HttpClient();
            String uploadUrl = "http://qincdtest.ematong.com/rapiddemo/manage/interface/upload";
            PostMethod pm = new PostMethod(uploadUrl);
            try {
                FilePart fp = new FilePart("filepart",file);
                Part[] parts = {fp,new StringPart("uploadpath",file.getAbsolutePath()),new StringPart("uploadTime",new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()))};
                HttpMethodParams hmps = pm.getParams();
                MultipartRequestEntity requestEntity = new MultipartRequestEntity(parts,hmps);
                pm.setRequestEntity(requestEntity);
                hc.getHttpConnectionManager().getParams().setConnectionTimeout(60*1000);
                int status = hc.executeMethod(pm);
                 
                if (status == HttpStatus.SC_OK) {
                    System.out.println(pm.getStatusLine());
                    System.out.println(pm.getResponseBodyAsString());
                    System.out.println("file upload success.");
                }
                else {
                    System.out.println("upload error.");
                }
            } catch (HttpException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                pm.releaseConnection();
            }
        }
    }
  • 相关阅读:
    集群--LVS的介绍
    http协议
    tomcat目录结构
    Response乱码的解决方法
    j2ee学习笔记 Filter过滤器
    Java数据库连接池
    j2ee学习笔记URLEncoder.encode(String , enc)处理特殊字符
    python学习笔记--Django入门四 管理站点--二
    网络学习笔记----02--IGMP组播、ARP
    网络学习笔记----01--pathping跟踪数据包路径
  • 原文地址:https://www.cnblogs.com/luckystar2010/p/4113504.html
Copyright © 2011-2022 走看看