zoukankan      html  css  js  c++  java
  • HTTP 工具类 封装 For android

    package com.example.testbingtoken;
    
    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.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.security.KeyStore;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.UUID;
    
    import org.apache.http.Header;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.HttpVersion;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.conn.ClientConnectionManager;
    import org.apache.http.conn.ConnectTimeoutException;
    import org.apache.http.conn.params.ConnManagerParams;
    import org.apache.http.conn.scheme.PlainSocketFactory;
    import org.apache.http.conn.scheme.Scheme;
    import org.apache.http.conn.scheme.SchemeRegistry;
    import org.apache.http.conn.ssl.SSLSocketFactory;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
    import org.apache.http.message.BasicHeader;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.BasicHttpParams;
    import org.apache.http.params.HttpConnectionParams;
    import org.apache.http.params.HttpParams;
    import org.apache.http.params.HttpProtocolParams;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;
    
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.util.Log;
    import android.widget.Toast;
    
    /**
     * HttpUtil Class Capsule Most Functions of Http Operations
     * 
     * @author sfshine
     * 
     */
    public class HttpUtil {
        private static Header[] headers = new BasicHeader[1];
        private static String TAG = "HTTPUTIL";
        private static int TIMEOUT = 5 * 1000;
        private static final String BOUNDARY = "---------------------------7db1c523809b2";
        /**
         * Your header of http op
         * 
         * @return
         */
        static {
    
            headers[0] = new BasicHeader("User-Agent",
                    "Mozilla/4.0 (compatible; MSIE 5.0; Windows XP; DigExt)");
    
        }
    
        public static boolean delete(String murl) throws Exception {
            URL url = new URL(murl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("DELETE");
            conn.setConnectTimeout(5000);
            if (conn.getResponseCode() == 204) {
    
                MLog.e(conn.toString());
                return true;
            }
            MLog.e(conn.getRequestMethod());
            MLog.e(conn.getResponseCode() + "");
            return false;
        }
    
        /**
         * Op Http get request
         * 
         * @param url
         * @param map
         *            Values to request
         * @return
         */
        static public String get(String url) {
            return get(url, null);
    
        }
    
        static public String get(String url, HashMap<String, String> map) {
    
            HttpClient client = new DefaultHttpClient();
            HttpConnectionParams.setConnectionTimeout(client.getParams(), TIMEOUT);
            HttpConnectionParams.setSoTimeout(client.getParams(), TIMEOUT);
            ConnManagerParams.setTimeout(client.getParams(), TIMEOUT);
            String result = "ERROR";
            if (null != map) {
                int i = 0;
                for (Map.Entry<String, String> entry : map.entrySet()) {
    
                    Log.i(TAG, entry.getKey() + "=>" + entry.getValue());
                    if (i == 0) {
                        url = url + "?" + entry.getKey() + "=" + entry.getValue();
                    } else {
                        url = url + "&" + entry.getKey() + "=" + entry.getValue();
                    }
    
                    i++;
    
                }
            }
            HttpGet get = new HttpGet(url);
            get.setHeaders(headers);
            Log.i(TAG, url);
            try {
    
                HttpResponse response = client.execute(get);
    
                if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    // setCookie(response);
                    result = EntityUtils.toString(response.getEntity(), "UTF-8");
    
                } else {
                    result = EntityUtils.toString(response.getEntity(), "UTF-8")
                            + response.getStatusLine().getStatusCode() + "ERROR";
                }
    
            } catch (ConnectTimeoutException e) {
                result = "TIMEOUTERROR";
            }
    
            catch (Exception e) {
                result = "OTHERERROR";
                e.printStackTrace();
    
            }
            Log.i(TAG, "result =>" + result);
    
            return result;
        }
    
        /**
         * Op Http post request , "404error" response if failed
         * 
         * @param url
         * @param map
         *            Values to request
         * @return
         */
    
        static public String post(String url, HashMap<String, String> map) {
    
            HttpClient client = new DefaultHttpClient();
            HttpConnectionParams.setConnectionTimeout(client.getParams(), TIMEOUT);
            HttpConnectionParams.setSoTimeout(client.getParams(), TIMEOUT);
            ConnManagerParams.setTimeout(client.getParams(), TIMEOUT);
            HttpPost post = new HttpPost(url);
            MLog.i(TAG, url);
            post.setHeaders(headers);
            String result = "ERROR";
            ArrayList<BasicNameValuePair> pairList = new ArrayList<BasicNameValuePair>();
            if (map != null) {
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    Log.i(TAG, entry.getKey() + "=>" + entry.getValue());
                    BasicNameValuePair pair = new BasicNameValuePair(
                            entry.getKey(), entry.getValue());
                    pairList.add(pair);
                }
    
            }
            try {
                HttpEntity entity = new UrlEncodedFormEntity(pairList, "UTF-8");
                post.setEntity(entity);
                HttpResponse response = client.execute(post);
    
                if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    
                    result = EntityUtils.toString(response.getEntity(), "UTF-8");
    
                } else {
                    result = EntityUtils.toString(response.getEntity(), "UTF-8")
                            + response.getStatusLine().getStatusCode() + "ERROR";
                }
    
            } catch (ConnectTimeoutException e) {
                result = "TIMEOUTERROR";
            }
    
            catch (Exception e) {
                result = "OTHERERROR";
                e.printStackTrace();
    
            }
            Log.i(TAG, "result =>" + result);
            return result;
        }
    
        /**
         * 自定义的http请求可以设置为DELETE PUT等而不是GET
         * 
         * @param url
         * @param params
         * @param method
         * @throws IOException
         */
    
        public static String customrequest(String url,
                HashMap<String, String> params, String method) {
            try {
    
                URL postUrl = new URL(url);
                HttpURLConnection conn = (HttpURLConnection) postUrl
                        .openConnection();
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setConnectTimeout(5 * 1000);
    
                conn.setRequestMethod(method);
                conn.setUseCaches(false);
                conn.setInstanceFollowRedirects(true);
                conn.setRequestProperty("Content-Type",
                        "application/x-www-form-urlencoded");
                conn.setRequestProperty("User-Agent",
                        "Mozilla/4.0 (compatible; MSIE 5.0; Windows XP; DigExt)");
    
                conn.connect();
                OutputStream out = conn.getOutputStream();
                StringBuilder sb = new StringBuilder();
                if (null != params) {
                    int i = params.size();
                    for (Map.Entry<String, String> entry : params.entrySet()) {
                        if (i == 1) {
                            sb.append(entry.getKey() + "=" + entry.getValue());
                        } else {
                            sb.append(entry.getKey() + "=" + entry.getValue() + "&");
                        }
    
                        i--;
                    }
                }
                String content = sb.toString();
                out.write(content.getBytes("UTF-8"));
                out.flush();
                out.close();
                InputStream inStream = conn.getInputStream();
                String result = inputStream2String(inStream);
                Log.i(TAG, "result>" + result);
                conn.disconnect();
                return result;
            } catch (Exception e) {
                // TODO: handle exception
            }
            return null;
        }
    
        /**
         * 必须严格限制get请求所以增加这个方法 这个方法也可以自定义请求
         * 
         * @param url
         * @param method
         * @throws Exception
         */
    
        public static String customrequestget(String url,
                HashMap<String, String> map, String method) {
    
            if (null != map) {
                int i = 0;
                for (Map.Entry<String, String> entry : map.entrySet()) {
    
                    if (i == 0) {
                        url = url + "?" + entry.getKey() + "=" + entry.getValue();
                    } else {
                        url = url + "&" + entry.getKey() + "=" + entry.getValue();
                    }
    
                    i++;
                }
            }
            try {
    
                URL murl = new URL(url);
                System.out.print(url);
                HttpURLConnection conn = (HttpURLConnection) murl.openConnection();
                conn.setConnectTimeout(5 * 1000);
                conn.setRequestMethod(method);
    
                conn.setRequestProperty("User-Agent",
                        "Mozilla/4.0 (compatible; MSIE 5.0; Windows XP; DigExt)");
    
                InputStream inStream = conn.getInputStream();
                String result = inputStream2String(inStream);
                Log.i(TAG, "result>" + result);
                conn.disconnect();
                return result;
            } catch (Exception e) {
                // TODO: handle exception
            }
            return null;
        }
    
        /**
         * 上传多张图片
         */
        public static void post(String actionUrl, Map<String, String> params,
                Map<String, File> files) throws IOException {
    
            String BOUNDARY = java.util.UUID.randomUUID().toString();
            String PREFIX = "--", LINEND = "rn";
            String MULTIPART_FROM_DATA = "multipart/form-data";
            String CHARSET = "UTF-8";
    
            URL uri = new URL(actionUrl);
            HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
            conn.setReadTimeout(5 * 1000); // 缓存的最长时间
            conn.setDoInput(true);// 允许输入
            conn.setDoOutput(true);// 允许输出
            conn.setUseCaches(false); // 不允许使用缓存
            conn.setRequestMethod("POST");
            conn.setRequestProperty("connection", "keep-alive");
            conn.setRequestProperty("Charsert", "UTF-8");
            conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
                    + ";boundary=" + BOUNDARY);
    
            // 首先组拼文本类型的参数
            StringBuilder sb = new StringBuilder();
            for (Map.Entry<String, String> entry : params.entrySet()) {
                sb.append(PREFIX);
                sb.append(BOUNDARY);
                sb.append(LINEND);
                sb.append("Content-Disposition: form-data; name=""
                        + entry.getKey() + """ + LINEND);
                sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
                sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
                sb.append(LINEND);
                sb.append(entry.getValue());
                sb.append(LINEND);
            }
    
            DataOutputStream outStream = new DataOutputStream(
                    conn.getOutputStream());
            outStream.write(sb.toString().getBytes());
            InputStream in = null;
            // 发送文件数据
            if (files != null) {
                for (Map.Entry<String, File> file : files.entrySet()) {
    
                    StringBuilder sb1 = new StringBuilder();
                    sb1.append(PREFIX);
                    sb1.append(BOUNDARY);
                    sb1.append(LINEND);
                    sb1.append("Content-Disposition: form-data; name="source"; filename=""
                            + file.getValue().getName() + """ + LINEND);
                    sb1.append("Content-Type: image/pjpeg; " + LINEND);
                    sb1.append(LINEND);
                    outStream.write(sb1.toString().getBytes());
    
                    InputStream is = new FileInputStream(file.getValue());
                    byte[] buffer = new byte[1024];
                    int len = 0;
                    while ((len = is.read(buffer)) != -1) {
                        outStream.write(buffer, 0, len);
                    }
    
                    is.close();
                    outStream.write(LINEND.getBytes());
                }
    
                // 请求结束标志
                byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
                outStream.write(end_data);
                outStream.flush();
                // 得到响应码
                int res = conn.getResponseCode();
                // if (res == 200) {
                in = conn.getInputStream();
                int ch;
                StringBuilder sb2 = new StringBuilder();
                while ((ch = in.read()) != -1) {
                    sb2.append((char) ch);
                }
    
                // }
                outStream.close();
                conn.disconnect();
            }
            // return in.toString();
    
        }
    
        /**
         * is转String
         * 
         * @param in
         * @return
         * @throws IOException
         */
        public static String inputStream2String(InputStream in) throws IOException {
            StringBuffer out = new StringBuffer();
            byte[] b = new byte[4096];
            for (int n; (n = in.read(b)) != -1;) {
                out.append(new String(b, 0, n));
            }
            return out.toString();
        }
    
        /**
         * check net work
         * 
         * @param context
         * @return
         */
        public static boolean hasNetwork(Context context) {
            ConnectivityManager con = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo workinfo = con.getActiveNetworkInfo();
            if (workinfo == null || !workinfo.isAvailable()) {
                Toast.makeText(context, "当前无网络连接,请稍后重试", Toast.LENGTH_SHORT).show();
                return false;
            }
            return true;
        }
    
        /***
         * @category check if the string is null
         * @return true if is null
         * */
        public static boolean isNull(String string) {
            boolean t1 = "".equals(string);
            boolean t2 = string == null;
            boolean t3 = string.equals("null");
            if (t1 || t2 || t3) {
                return true;
            } else {
                return false;
            }
        }
    
        static public byte[] getBytes(File file) throws IOException {
            InputStream ios = null;
            ByteArrayOutputStream ous = null;
            try {
                byte[] buffer = new byte[4096];
                ous = new ByteArrayOutputStream();
                ios = new FileInputStream(file);
                int read = 0;
                while ((read = ios.read(buffer)) != -1) {
                    ous.write(buffer, 0, read);
                }
            } finally {
                try {
                    if (ous != null)
                        ous.close();
                } catch (IOException e) {
                }
    
                try {
                    if (ios != null)
                        ios.close();
                } catch (IOException e) {
                }
            }
    
            return ous.toByteArray();
        }
    
        public static class MLog {
            static public void e(String msg) {
                android.util.Log.e("=======ERROR======", msg);
            }
    
            static public void e(String tag, String msg) {
                android.util.Log.e(tag, msg);
            }
    
            static public void i(String msg) {
                android.util.Log.i("=======INFO======", msg);
            }
    
            static public void i(String tag, String msg) {
                android.util.Log.i(tag, msg);
            }
    
        }
    }
  • 相关阅读:
    MSSQL·阻止保存要求重新创建表的更改配置
    MSSQL·查询某数据库中所有表的记录数并排序
    异常处理·psftp·local unable to open
    MSSQL·Execution Timeout Expired. The timeout period elapsed prior to completion of the oper..
    MSSQL·ORDER BY 1 DESC是什么写法?
    MSSQL·大数据量历史数据清理的思路
    ubuntu清理wine卸载后的残余项目
    Learning the Vi Editor, 6th Edition O'Reilly Media
    做一粒不浮躁的好“种子”
    Qt Designer使用简易教程
  • 原文地址:https://www.cnblogs.com/fx2008/p/3138130.html
Copyright © 2011-2022 走看看