关闭

网络连接底层工具类,执行get和post请求(用于在一个项目中去对另外项目发出请求)

337人阅读 评论(0) 收藏 举报
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.activation.MimetypesFileTypeMap;


/**
 * 网络连接底层类,执行get和post请求
 * @author Shine_MuShi
 */
public abstract class WebUtils {

        private static final String DEFAULT_CHARSET ="utf-8";
        private static final String METHOD_POST = "POST";
        private static final String METHOD_GET = "GET";
        private static final String USER_AGENT="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13";
        private static final String CTYPE = "application/x-www-form-urlencoded;text/html;charset=" + DEFAULT_CHARSET;
        
        public WebUtils() {
                
        }
        /**
         * 执行POST提交
         * @parmaַ
         * @param params
         * @return
         * @throws IOException
         */
        public static String doPost(String url, Map<String, String> params,int connectTimeout,int readTimeout) throws IOException {
                String query=buildQuery(params, DEFAULT_CHARSET);
                byte[] content=null;
                if(query!=null){
                        content=query.getBytes(DEFAULT_CHARSET);
                }
                return doPost(url, CTYPE, content, connectTimeout, readTimeout);
        }
        
        /**
         * 执行POST提交
         * @param url
         * @param ctype
         * @param content
         * @param connectTimeout
         * @param readTimeout
         * @return
         * @throws IOException
         */
        public static String doPost(String url, String ctype, byte[] content,int connectTimeout,int readTimeout) throws IOException {
                HttpURLConnection conn = null;
                OutputStream out = null;
                String rsp = null;
                try {
                        try{
                                conn = getConnection(new URL(url), METHOD_POST, ctype); 
                                conn.setConnectTimeout(connectTimeout);
                                conn.setReadTimeout(readTimeout);
                                out = conn.getOutputStream();
                                out.write(content);
                                rsp = getResponseAsString(conn);
                        }catch(IOException e){
                                throw e;
                        }
                }finally {
                        if (out != null) {
                                out.close();
                        }
                        if (conn != null) {
                                conn.disconnect();
                        }
                }
                return rsp;
        }
        
        /**
         * 执行GET提交
         * @param url
         * @return
         * @throws IOException
         */
        public static String doGet(String url) throws IOException {
                return doGet(url, DEFAULT_CHARSET);
        }

        public static String doGet(String url, String charset)
                        throws IOException {
                HttpURLConnection conn = null;
                String rsp = null;
                try {
                        try{
                                conn = getConnection(new URL(url), METHOD_GET, CTYPE);
                                rsp = getResponseAsString(conn);
                        }catch(IOException e){
                                throw e;
                        }
                } finally {
                        if (conn != null) {
                                conn.disconnect();
                        }
                }
                return rsp;
        }
        
        /**
         * 获取URL连接
         * @param url
         * @param action
         * @param ctype
         * @return
         * @throws IOException
         */
        private static HttpURLConnection getConnection(URL url, String action, String ctype)
                        throws IOException {
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod(action);
                conn.setDoInput(true);
                conn.setDoOutput(true);
                conn.setRequestProperty("Accept", "text/xml,text/javascript,text/html");
                conn.setRequestProperty("User-Agent", USER_AGENT);
                conn.setRequestProperty("Content-Type", ctype);
                return conn;
        }
        
        /**
         * 响应流转为String
         * @param conn
         * @return
         * @throws IOException
         */
        private static String getResponseAsString(HttpURLConnection conn) throws IOException {
                String charset = getResponseCharset(conn.getContentType());
                InputStream es = conn.getErrorStream();
                if (es == null) {
                        return getStreamAsString(conn.getInputStream(), charset);
                }
                return null;
        }
        
        /**
         * 从流获取字符串
         * @param stream
         * @param charset
         * @return
         * @throws IOException
         */
        private static String getStreamAsString(InputStream stream, String charset) throws IOException {
                try {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(stream, charset));
                        StringWriter writer = new StringWriter();
                        char[] chars = new char[256];
                        int count = 0;
                        while ((count = reader.read(chars)) > 0) {
                                writer.write(chars, 0, count);
                        }
                        return writer.toString();
                } finally {
                        if (stream != null) {
                                stream.close();
                        }
                }
        }

        /**
         * 获取响应的字符编码
         * @param ctype
         * @return
         */
        private static String getResponseCharset(String ctype) {
                String charset = DEFAULT_CHARSET;
                if (ctype!=null) {
                        String[] params = ctype.split(";");
                        for (String param : params) {
                                param = param.trim();
                                if (param.startsWith("charset")) {
                                        String[] pair = param.split("=", 2);
                                        if (pair.length == 2) {
                                                if (pair[1]!=null) {
                                                        charset = pair[1].trim();
                                                }
                                        }
                                        break;
                                }
                        }
                }
                return charset;
        }
        
        /**
         * 绑定参数
         * @param params
         * @param charset
         * @return
         * @throws IOException
         */
        public static String buildQuery(Map<String, String> params, String charset) throws IOException {
                if (params == null || params.isEmpty()) {
                        return null;
                }
                StringBuilder query = new StringBuilder();
                Set<Entry<String, String>> entries = params.entrySet();
                boolean hasParam = false;
                for (Entry<String, String> entry : entries) {
                        String name = entry.getKey();
                        String value = entry.getValue();
                        if (name!=null&&value!=null) {
                                if (hasParam) {
                                        query.append("&");
                                } else {
                                        hasParam = true;
                                }
                                query.append(name).append("=").append(URLEncoder.encode(value, charset));
                        }
                }
                return query.toString();
        }
        public static InputStream getStream(String url) throws IOException{
        	HttpURLConnection conn = null;
        	InputStream in = null;
        	try {
        		 conn = getConnection(new URL(url), METHOD_GET, "application/octet-stream");
        		 conn.setConnectTimeout(0);
                 conn.setReadTimeout(0);
                 in = conn.getInputStream();
                 return in;
			} catch (Exception e) {
				System.out.println("出现异常");
				return null;
			}
        }
        /**
         * 
          * @Description
          * @param @param urlStr URL连接地址
          * @param @param textMap 文件其他参数
          * @param @param fileMap 文件流相关数据
          * @param @return
         * @throws IOException 
         * @throws    
          * @return
         */
        public static String formUpload(String urlStr, Map<String, String> textMap,  
                Map<String, String> fileMap) throws IOException {  
            String res = "";  
            HttpURLConnection conn = null;  
            String BOUNDARY = "---------------------------pengliuUloadImage"; //boundary就是request头和上传文件内容的分隔符  
                URL url = new URL(urlStr);  
                conn = (HttpURLConnection) url.openConnection();  
                conn.setConnectTimeout(0);  
                conn.setReadTimeout(0);  
                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("\r\n").append("--").append(BOUNDARY).append(  
                                "\r\n");  
                        strBuf.append("Content-Disposition: form-data; name=\""  
                                + inputName + "\"\r\n\r\n");
                        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();  
                        String contentType = new MimetypesFileTypeMap()  
                                .getContentType(file);  
                        if (filename.endsWith(".png")) {  
                            contentType = "image/png";  
                        }  
                        if (contentType == null || contentType.equals("")) {  
                            contentType = "multipart/form-data";  
                        }  
      
                        StringBuffer strBuf = new StringBuffer();  
                        strBuf.append("\r\n").append("--").append(BOUNDARY).append(  
                                "\r\n");  
                        strBuf.append("Content-Disposition: form-data; name=\""  
                                + inputName + "\"; filename=\"" + filename  
                                + "\"\r\n");  
                        strBuf.append("Content-Type:" + contentType + "\r\n\r\n");  
      
                        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 = ("\r\n--" + BOUNDARY + "--\r\n").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("\n");  
                }  
                res = strBuf.toString();  
                reader.close();  
                reader = null;  
                */
                out = conn.getOutputStream();
                String result=getResponseAsString(conn);
                if (conn != null) {  
                    conn.disconnect();  
                    conn = null;  
                } 
                return result;
                 
        }
}
调用api方式:
<pre name="code" class="java"><span style="white-space:pre">					</span>String path=SysconfigHelper.getProperty("pcVisited_baseUrl")+"action2/hsp-SaveHospitalCount.action";
					Map<String,String> params = new HashMap<String, String>();
					params.put("id",request.getParameter("id"));
					WebUtils.doPost(path, params, 0, 0);


   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6773次
    • 积分:113
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章存档
    最新评论