HTTP封裝類 工具類 For Android

jopen 9年前發布 | 2K 次閱讀 Java Android

================2013 04 10 解決2.1 認證問題

package com.su.funycard.util;

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.Socket; import java.net.URL; import java.net.UnknownHostException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.UUID;

import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager;

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 = getNewHttpClient(); 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 = getNewHttpClient(); 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 String post(String actionUrl, Map<String, String> params,

       Map<String, File> files) {
      
      

      String BOUNDARY = java.util.UUID.randomUUID().toString(); String PREFIX = "--", LINEND = "\r\n"; String MULTIPART_FROM_DATA = "multipart/form-data"; String CHARSET = "UTF-8"; try {

       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=\""
                       + file.getKey() + "\"; 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();
       }
      

      } catch (Exception e) {

      } return null;

      }

      /**

    • 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);
      

      }

      }

      /**

    • 處理https加密失敗的情況
    • @return */ public static HttpClient getNewHttpClient() { try {

       KeyStore trustStore = KeyStore.getInstance(KeyStore
               .getDefaultType());
       trustStore.load(null, null);
      
       SSLSocketFactory sf = new HttpUtil.SSLSocketFactoryEx(trustStore);
       sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
      
       HttpParams params = new BasicHttpParams();
       HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
       HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
      
       SchemeRegistry registry = new SchemeRegistry();
       registry.register(new Scheme("http", PlainSocketFactory
               .getSocketFactory(), 80));
       registry.register(new Scheme("https", sf, 443));
      
       ClientConnectionManager ccm = new ThreadSafeClientConnManager(
               params, registry);
      
       return new DefaultHttpClient(ccm, params);
      

      } catch (Exception e) {

       return new DefaultHttpClient();
      

      } }

      static public class SSLSocketFactoryEx extends SSLSocketFactory {

      SSLContext sslContext = SSLContext.getInstance("TLS");

      public SSLSocketFactoryEx(KeyStore truststore)

           throws NoSuchAlgorithmException, KeyManagementException,
           KeyStoreException, UnrecoverableKeyException {
       super(truststore);
      
       TrustManager tm = new X509TrustManager() {
           public java.security.cert.X509Certificate[] getAcceptedIssuers() {
               return null;
           }
      
           @Override
           public void checkClientTrusted(
                   java.security.cert.X509Certificate[] chain,
                   String authType)
                   throws java.security.cert.CertificateException {
           }
      
           @Override
           public void checkServerTrusted(
                   java.security.cert.X509Certificate[] chain,
                   String authType)
                   throws java.security.cert.CertificateException {
           }
       };
       sslContext.init(null, new TrustManager[] { tm }, null);
      

      }

      @Override public Socket createSocket(Socket socket, String host, int port,

           boolean autoClose) throws IOException, UnknownHostException {
       return sslContext.getSocketFactory().createSocket(socket, host,
               port, autoClose);
      

      }

      @Override public Socket createSocket() throws IOException {

       return sslContext.getSocketFactory().createSocket();
      

      } } }</pre>





      ================2013 04 09 完全無其他依賴

      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 = "\r\n"; 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);
      

      }

      } }</pre>










      package com.su.doubanrise.util;

import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.Socket; import java.net.SocketTimeoutException; import java.net.URL; import java.net.URLConnection; import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;

import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; 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.ConnectTimeoutException; import org.apache.http.conn.params.ConnManagerParams; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.HttpConnectionParams; 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;

import com.su.doubanrise.api.Douban; import com.su.doubanrise.api.bean.FormFile;

/**

  • HttpUtil Class Capsule Most Functions of Http Operations
  • @author sfshine
  • */ public class HttpUtil {

    private static Header[] headers = new BasicHeader[11]; private static String TAG = "HTTPUTIL"; private static int TIMEOUT = 5 * 1000; private static final String BOUNDARY = "---------------------------7db1c523809b2"; /**

    • Your header of http op */ static { headers[0] = new BasicHeader("Authorization", "Bearer "

           + Douban.getAccessToken());
      

      headers[1] = new BasicHeader("Udid", ""); headers[2] = new BasicHeader("Os", ""); headers[3] = new BasicHeader("Osversion", ""); headers[4] = new BasicHeader("Appversion", ""); headers[5] = new BasicHeader("Sourceid", ""); headers[6] = new BasicHeader("Ver", ""); headers[7] = new BasicHeader("Userid", ""); headers[8] = new BasicHeader("Usersession", ""); headers[9] = new BasicHeader("Unique", ""); headers[10] = new BasicHeader("Cookie", ""); }

      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) {

      DefaultHttpClient client = new DefaultHttpClient(); HttpConnectionParams.setConnectionTimeout(client.getParams(), TIMEOUT); HttpConnectionParams.setSoTimeout(client.getParams(), TIMEOUT); ConnManagerParams.setTimeout(client.getParams(), TIMEOUT);

      MLog.e(headers[0] + ""); 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; }

      /**

    • 上傳帶圖片的http請求
    • @param murl網址
    • @param map
    • 參數對 主要不要包括圖片
    • @param path
    • 圖片路徑 也可以是其他格式 自行做
    • @return
    • @throws Exception */ static public String post(String murl, HashMap<String, String> map,

       String path) throws Exception {
      

      File file = new File(path); String filename = path.substring(path.lastIndexOf("/")); // String filename = Str.md5(path); StringBuilder sb = new StringBuilder(); if (null != map) {

       for (Map.Entry<String, String> entry : map.entrySet()) {
           sb.append("--" + BOUNDARY + "\r\n");
           sb.append("Content-Disposition: form-data; name=\""
                   + entry.getKey() + "\"" + "\r\n");
           sb.append("\r\n");
           sb.append(entry.getValue() + "\r\n");
      
       }
      

      }

      sb.append("--" + BOUNDARY + "\r\n"); sb.append("Content-Disposition: form-data; name=\"image\"; filename=\""

           + filename + "\"" + "\r\n");
      
      

      sb.append("Content-Type: image/pjpeg" + "\r\n"); sb.append("\r\n");

      byte[] before = sb.toString().getBytes("UTF-8"); byte[] after = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");

      URL url = new URL(murl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type",

           "multipart/form-data; boundary=" + BOUNDARY);
      
      

      conn.setRequestProperty("Authorization",

           "Bearer " + Douban.getAccessToken());
      

      conn.setRequestProperty("Content-Length",

           String.valueOf(before.length + file.length() + after.length));
      

      conn.setRequestProperty("HOST", url.getHost()); conn.setDoOutput(true);

      OutputStream out = conn.getOutputStream(); InputStream in = new FileInputStream(file);

      out.write(before);

      byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) != -1)

       out.write(buf, 0, len);
      
      

      out.write(after);

      in.close(); out.close(); MLog.i("result=>" + inputStream2String(conn.getInputStream()) + ""); if (conn.getResponseCode() == HttpStatus.SC_OK) {

       return inputStream2String(conn.getInputStream());
      

      } else {

       return inputStream2String(conn.getInputStream()) + "Code"
               + conn.getResponseCode();
      

      }

      }

      /**

    • 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(); }

      /**

    • 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) {

      DefaultHttpClient client = new DefaultHttpClient(); HttpConnectionParams.setConnectionTimeout(client.getParams(), TIMEOUT); HttpConnectionParams.setSoTimeout(client.getParams(), TIMEOUT); ConnManagerParams.setTimeout(client.getParams(), TIMEOUT); HttpPost post = new HttpPost(url); Log.i(TAG, url); MLog.e(headers[0] + ""); 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; }

      /**

    • Post Bytes to Server
    • @param url
    • @param bytes
    • of text
    • @return */ public static String PostBytes(String url, byte[] bytes) { try {

       URL murl = new URL(url);
       final HttpURLConnection con = (HttpURLConnection) murl
               .openConnection();
      
       con.setDoInput(true);
       con.setDoOutput(true);
       con.setUseCaches(false);
      
       con.setRequestMethod("POST");
       con.setRequestProperty("Connection", "Keep-Alive");
       con.setRequestProperty("Charset", "UTF-8");
       con.setRequestProperty("Content-Type", "text/html");
       String cookie = headers[10].getValue();
       if (!isNull(headers[10].getValue())) {
           con.setRequestProperty("cookie", cookie);
       }
      
       con.setReadTimeout(TIMEOUT);
       con.setConnectTimeout(TIMEOUT);
       Log.i(TAG, url);
       DataOutputStream dsDataOutputStream = new DataOutputStream(
               con.getOutputStream());
       dsDataOutputStream.write(bytes, 0, bytes.length);
      
       dsDataOutputStream.close();
       if (con.getResponseCode() == HttpStatus.SC_OK) {
           InputStream isInputStream = con.getInputStream();
           int ch;
           StringBuffer buffer = new StringBuffer();
           while ((ch = isInputStream.read()) != -1) {
               buffer.append((char) ch);
           }
      
           Log.i(TAG, "GetDataFromServer>" + buffer.toString());
      
           return buffer.toString();
       } else {
           return "404error";
       }
      

      } catch (SocketTimeoutException e) {

       return "timeouterror";
      

      } catch (IOException e) {

       // TODO Auto-generated catch block
       return "404error";
      

      } }

      /**

    • set Cookie
    • @param response */ private static void setCookie(HttpResponse response) { if (response.getHeaders("Set-Cookie").length > 0) {

       Log.d(TAG, response.getHeaders("Set-Cookie")[0].getValue());
       headers[10] = new BasicHeader("Cookie",
               response.getHeaders("Set-Cookie")[0].getValue());
      

      } }

      /**

    • 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;
      
      } } }</pre>




      2012 12 31 添加自定義的URLConnection請求版本

      package com.su.doubanrise.util;

import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.Socket; import java.net.SocketTimeoutException; import java.net.URL; import java.net.URLConnection; import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;

import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; 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.ConnectTimeoutException; import org.apache.http.conn.params.ConnManagerParams; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.HttpConnectionParams; 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;

import com.su.doubanrise.api.Douban; import com.su.doubanrise.api.bean.FormFile;

/**

  • HttpUtil Class Capsule Most Functions of Http Operations
  • @author sfshine
  • */ public class HttpUtil {

    private static Header[] headers = new BasicHeader[11]; private static String TAG = "HTTPUTIL"; private static int TIMEOUT = 5 * 1000; private static final String BOUNDARY = "---------------------------7db1c523809b2";

    /**

    • 在第一次授權的時候可能頭部是空需要調用這個方法初始化token */ public static void initAfterAuth() { headers[0] = new BasicHeader("Authorization", "Bearer "

           + Douban.getAccessToken());
      
      

      }

      /**

    • Your header of http op
    • @return */ static { headers[0] = new BasicHeader("Authorization", "Bearer "

           + Douban.getAccessToken());
      

      // headers[0] = new BasicHeader("Authorization", // Douban.getAccessToken()); headers[1] = new BasicHeader("Udid", ""); headers[2] = new BasicHeader("Os", ""); headers[3] = new BasicHeader("Osversion", ""); headers[4] = new BasicHeader("Appversion", ""); headers[5] = new BasicHeader("Sourceid", ""); headers[6] = new BasicHeader("Ver", ""); headers[7] = new BasicHeader("Userid", ""); headers[8] = new BasicHeader("Usersession", ""); headers[9] = new BasicHeader("Unique", ""); headers[10] = new BasicHeader("Cookie", ""); }

      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) {

      DefaultHttpClient client = new DefaultHttpClient(); HttpConnectionParams.setConnectionTimeout(client.getParams(), TIMEOUT); HttpConnectionParams.setSoTimeout(client.getParams(), TIMEOUT); ConnManagerParams.setTimeout(client.getParams(), TIMEOUT);

      MLog.e(headers[0] + ""); 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; }

      /**

    • 上傳帶圖片的http請求
    • @param murl網址
    • @param map
    • 參數對 主要不要包括圖片
    • @param path
    • 圖片路徑 也可以是其他格式 自行做
    • @return
    • @throws Exception */ static public String post(String murl, HashMap<String, String> map,

       String path) throws Exception {
      

      File file = new File(path); String filename = path.substring(path.lastIndexOf("/")); // String filename = Str.md5(path); StringBuilder sb = new StringBuilder(); if (null != map) {

       for (Map.Entry<String, String> entry : map.entrySet()) {
           sb.append("--" + BOUNDARY + "\r\n");
           sb.append("Content-Disposition: form-data; name=\""
                   + entry.getKey() + "\"" + "\r\n");
           sb.append("\r\n");
           sb.append(entry.getValue() + "\r\n");
      
       }
      

      }

      sb.append("--" + BOUNDARY + "\r\n"); sb.append("Content-Disposition: form-data; name=\"image\"; filename=\""

           + filename + "\"" + "\r\n");
      
      

      sb.append("Content-Type: image/pjpeg" + "\r\n"); sb.append("\r\n");

      byte[] before = sb.toString().getBytes("UTF-8"); byte[] after = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");

      URL url = new URL(murl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type",

           "multipart/form-data; boundary=" + BOUNDARY);
      
      

      conn.setRequestProperty("Authorization",

           "Bearer " + Douban.getAccessToken());
      

      conn.setRequestProperty("Content-Length",

           String.valueOf(before.length + file.length() + after.length));
      

      conn.setRequestProperty("HOST", url.getHost()); conn.setDoOutput(true);

      OutputStream out = conn.getOutputStream(); InputStream in = new FileInputStream(file);

      out.write(before);

      byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) != -1)

       out.write(buf, 0, len);
      
      

      out.write(after);

      in.close(); out.close(); MLog.i("result=>" + inputStream2String(conn.getInputStream()) + ""); if (conn.getResponseCode() == HttpStatus.SC_OK) {

       return inputStream2String(conn.getInputStream());
      

      } else {

       return inputStream2String(conn.getInputStream()) + "Code"
               + conn.getResponseCode();
      

      }

      }

      /**

    • 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(); }

      /**

    • 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) {

      DefaultHttpClient client = new DefaultHttpClient(); HttpConnectionParams.setConnectionTimeout(client.getParams(), TIMEOUT); HttpConnectionParams.setSoTimeout(client.getParams(), TIMEOUT); ConnManagerParams.setTimeout(client.getParams(), TIMEOUT); HttpPost post = new HttpPost(url); Log.i(TAG, url); MLog.e(headers[0] + ""); 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 void customrequest(String url,

       HashMap<String, String> params, String method) throws IOException {
      

      URL postUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) postUrl.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setConnectTimeout(5 * 1000); conn.setRequestProperty("Authorization",

           "Bearer " + Douban.getAccessToken());
      

      conn.setRequestMethod(method); conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); conn.setRequestProperty("Content-Type",

           "application/x-www-form-urlencoded");
      

      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(); System.out.print(content); out.write(content.getBytes("UTF-8")); out.flush(); out.close(); InputStream inStream = conn.getInputStream(); String result = inputStream2String(inStream); System.out.println(result); conn.disconnect(); }

      /**

    • 豆瓣必須嚴格限制get請求所以增加這個方法 這個方法也可以自定義請求
    • @param url
    • @param method
    • @throws Exception */

      public static void customrequestget(String url,

       HashMap<String, String> map, String method) throws Exception {
      

      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++;
       }
      

      } URL murl = new URL(url); System.out.print(url); HttpURLConnection conn = (HttpURLConnection) murl.openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod(method); conn.setRequestProperty("Authorization",

           "Bearer " + Douban.getAccessToken());
      

      InputStream inStream = conn.getInputStream(); String result = inputStream2String(inStream); System.out.println(result); conn.disconnect(); }

      /**

    • Post Bytes to Server
    • @param url
    • @param bytes
    • of text
    • @return */ public static String PostBytes(String url, byte[] bytes) { try {

       URL murl = new URL(url);
       final HttpURLConnection con = (HttpURLConnection) murl
               .openConnection();
      
       con.setDoInput(true);
       con.setDoOutput(true);
       con.setUseCaches(false);
      
       con.setRequestMethod("POST");
       con.setRequestProperty("Connection", "Keep-Alive");
       con.setRequestProperty("Charset", "UTF-8");
       con.setRequestProperty("Content-Type", "text/html");
       String cookie = headers[10].getValue();
       if (!isNull(headers[10].getValue())) {
           con.setRequestProperty("cookie", cookie);
       }
      
       con.setReadTimeout(TIMEOUT);
       con.setConnectTimeout(TIMEOUT);
       Log.i(TAG, url);
       DataOutputStream dsDataOutputStream = new DataOutputStream(
               con.getOutputStream());
       dsDataOutputStream.write(bytes, 0, bytes.length);
      
       dsDataOutputStream.close();
       if (con.getResponseCode() == HttpStatus.SC_OK) {
           InputStream isInputStream = con.getInputStream();
           int ch;
           StringBuffer buffer = new StringBuffer();
           while ((ch = isInputStream.read()) != -1) {
               buffer.append((char) ch);
           }
      
           Log.i(TAG, "GetDataFromServer>" + buffer.toString());
      
           return buffer.toString();
       } else {
           return "404error";
       }
      

      } catch (SocketTimeoutException e) {

       return "timeouterror";
      

      } catch (IOException e) {

       // TODO Auto-generated catch block
       return "404error";
      

      } }

      /**

    • set Cookie
    • @param response */ private static void setCookie(HttpResponse response) { if (response.getHeaders("Set-Cookie").length > 0) {

       Log.d(TAG, response.getHeaders("Set-Cookie")[0].getValue());
       headers[10] = new BasicHeader("Cookie",
               response.getHeaders("Set-Cookie")[0].getValue());
      

      } }

      /**

    • 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;
      
      } } }</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!