apache httpclient和fileupload包使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qincidong/article/details/40893613
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();
        }
    }
}
package com.company.project.controller;
 
import java.io.File;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.List;
 
import javacommon.base.BaseRestSpringController;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
 
import com.company.project.model.TradePack;
import com.company.project.util.EApiUtil;
 
/**
 * @author qince
 *
 */
@Controller
@RequestMapping("/manage/interface")
public class HttpClientObjectTransfer extends BaseRestSpringController<TradePack, Long>{
 
    /**
     * 输出对象
     *
     * @author qincd
     * @throws IOException
     * @date Oct 10, 2014 5:11:55 PM
     */
    @RequestMapping("/test/{appId}")
    public String writeObject(@PathVariable String appId,HttpServletResponse response) throws IOException {
        System.out.println("appId:" + appId);
        TradePack tradePack = new TradePack();
        tradePack.setAppId(appId);
        tradePack.setMyFlowNo("M01");
        tradePack.setTradeNo("0324");
         
        String sign = EApiUtil.callInnerSign(tradePack);
        System.out.println("sign:" + sign);
        tradePack.setSign(sign);
         
        ObjectOutputStream oos = new ObjectOutputStream(response.getOutputStream());
        oos.writeObject(tradePack);
        oos.close();
        return null;
    }
     
    /**
     * 通过commons-fileupload上传文件
     *
     * @author qincd
     * @date Oct 10, 2014 6:05:33 PM
     */
    @RequestMapping("/upload")
    public String upload(HttpServletRequest request,HttpServletResponse response) {
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(4*1024); // 设置缓冲区大小
        File tmpDir = new File("d:/tmp");
        if (!tmpDir.exists()) {
            tmpDir.mkdirs();
        }
        factory.setRepository(tmpDir);
         
        ServletFileUpload sfu = new ServletFileUpload(factory);
        sfu.setSizeMax(10*1024*1024); // 设置最大文件尺寸
         
        try {
            List<FileItem> files = sfu.parseRequest(request);
            for (FileItem fi : files) {
                if (fi.isFormField()) { // 表单元素
                    System.out.println(fi.getFieldName() + "=" + fi.getString());
                }
                else {
                    String fileName = fi.getName();
                    File storeDir = new File("d:/files/");
                    if (!storeDir.exists()) {
                        storeDir.mkdirs();
                    }
                    File saveFile = new File(storeDir,fileName);
                    fi.write(saveFile);
                    System.out.println("file [" + fileName + "] upload success.");
                }
            }
            response.getWriter().println("file upload successfully.");
        } catch (FileUploadException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
         
         
        return null;
    }
}

package com.company.project.model;
 
import java.io.Serializable;
import java.util.Date;
 
public class TradePack implements Serializable{
 
    private String appId;
    private String sign;
    private String myFlowNo;
    private String tradeNo;
    private Date tradeTime;
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getSign() {
        return sign;
    }
    public void setSign(String sign) {
        this.sign = sign;
    }
    public String getMyFlowNo() {
        return myFlowNo;
    }
    public void setMyFlowNo(String myFlowNo) {
        this.myFlowNo = myFlowNo;
    }
    public String getTradeNo() {
        return tradeNo;
    }
    public void setTradeNo(String tradeNo) {
        this.tradeNo = tradeNo;
    }
     
    /**
     * @return the tradeTime
     */
    public Date getTradeTime() {
        return tradeTime;
    }
    /**
     * @param tradeTime the tradeTime to set
     */
    public void setTradeTime(Date tradeTime) {
        this.tradeTime = tradeTime;
    }
    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return super.toString();
    }
     
     
}

可以通过Httpclient来实现各个系统间的接口调用,文件上传等。

猜你喜欢

转载自blog.csdn.net/qincidong/article/details/40893613