http访问方式

package com.m.billingplug.util;

import java.io.IOException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
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.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Message;

import com.m.billingplug.entity.MobileNetworkMgr;
import com.m.billingplug.entity.NetworkMgr;
import com.m.billingplug.entity.ParamValue;
import com.m.billingplug.entity.SystemCode;

/**
 * 网络管理类
 * 
 * @author mhx
 * 
 */
public class HttpNetUtil {

    /**
     * 日志标签
     */
    private static final String tag = HttpNetUtil.class.getSimpleName();

    /**
     * 发送get请求
     * @param url 访问地址
     * @param map 参数
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     */
    public String requestGet(String url, Map<String, Object> map) throws ClientProtocolException, IOException {
        // String url = path + "?name=" + name + "&pwd=" + pwd;
        // 设置参数
        if (map != null && map.size() > 0) {// 有参数
            url += "?";
            for (Entry<String, Object> entry : map.entrySet()) {
                url += entry.getKey() + "=" + entry.getValue() + "&";
            }
            url = url.substring(0, url.length() - 1);
        }
        HttpGet httpGet = new HttpGet(url);
        HttpResponse response = new DefaultHttpClient().execute(httpGet);
        String result = "";
        if (response.getStatusLine().getStatusCode() == 200) {
            HttpEntity entity = response.getEntity();
            result = EntityUtils.toString(entity, HTTP.UTF_8);
        }
        return result;
    }

    /**
     * 发送post请求
     * @param url 访问地址
     * @param map 参数
     * @return
     * @throws Exception
     */
    public String requestPost(String url, Map<String, Object> map) throws Exception {
        LogUtil.i("++++++++++++ send request ++++++++++++++");
        LogUtil.i("url:"+url);
        LogUtil.i("param:"+map);
        LogUtil.i("++++++++++++++++++++++++++++++++++++++");
        
        HttpPost httpPost = new HttpPost(url);
        // 请求超时
        httpPost.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
        // 读取超时
        httpPost.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
        
        List<NameValuePair> list = new ArrayList<NameValuePair>();
        // 设置参数
        if (map != null && map.size() > 0) {// 有参数
            for (Entry<String, Object> entry : map.entrySet()) {
                list.add(new BasicNameValuePair(entry.getKey(), entry
                        .getValue() + "" ));
            }
        }
        httpPost.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8));
        String result = "";
        HttpResponse response = new DefaultHttpClient().execute(httpPost);
        
        int httpCode = response.getStatusLine().getStatusCode() ;
        LogUtil.i("httpCode" + httpCode);
        
        HttpEntity entity = response.getEntity();
        result = EntityUtils.toString(entity, HTTP.UTF_8);
        
        LogUtil.i("--------------http respnose------------------");
        LogUtil.i(result);
        LogUtil.i("---------------------------------------------");
        /*if (httpCode == 200) {
        }*/
        
        return result;
    }
    
    /**
     * post请求
     * @param list 参数
     * @param url 访问地址
     * @return
     * @throws IOException
     * @throws JSONException
     */
    public JSONObject requestPost(List<NameValuePair> list, String url) throws IOException, JSONException {

        for (int i = 0; i < list.size(); i++) {
            LogUtil.i(tag, "sentData: " + list.get(i).toString());
        }

        LogUtil.i(tag, "url = " + url);

        DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        // 请求超时
        defaultHttpClient.getParams().setParameter(
                CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
        // 读取超时
        defaultHttpClient.getParams().setParameter(
                CoreConnectionPNames.SO_TIMEOUT, 10000);
        UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(
                list, HTTP.UTF_8);
        httpPost.setEntity(urlEncodedFormEntity);

        HttpResponse httpResponse = defaultHttpClient.execute(httpPost);
        int httpStatusCode = httpResponse.getStatusLine().getStatusCode();
        LogUtil.i(tag, "httpStatusCode = " + httpStatusCode);
        JSONObject jsonObject = null;

        switch (httpStatusCode) {
        case 200:// 成功
            String result = EntityUtils.toString(httpResponse.getEntity(),
                    HTTP.UTF_8);
            LogUtil.i(tag, "result =" + result);
            jsonObject = new JSONObject(result);
            break;
        default:
            httpResponse.getEntity().consumeContent();
            break;
        }
        return jsonObject;
    }
    
    /**
     * 发送post请求 (第一次,直接去访问 第二次。网络不通,打开wifi 第三次。wifi不可以用,关wifi,打开2g,3g)
     * @param context 上下文
     * @param url 访问地址
     * @param params 参数
     * @param myHandler handler
     * @return
     */
    public String requestPost(Context context, String url, Map<String, Object> params, Handler myHandler){
        String result = null;
        try {
            //第一次,直接去访问
            LogUtil.i(tag, "第一次,直接去访问");
            result = requestPost(url, params);
        } catch (Exception e) {
            try {
                //第二次。网络不通,打开wifi
                LogUtil.i(tag, "第二次。网络不通,打开wifi");
                openWifi(context);
                result = requestPost(url, params);
            } catch (Exception e1) {
                try {
                    //第三次。wifi不可以用,关wifi,打开2g,3g
                    LogUtil.i(tag, "第三次。wifi不可以用,关wifi,打开2g,3g");
                    openMobileNetwork(context);
                    result = requestPost(url, params);
                } catch (Exception e2) {
                    if (e2 instanceof IllegalStateException) {
                        e2.printStackTrace();
                    } else {
                        if(myHandler != null) {
                            Message msg = new Message();// 定义Message
                            msg.what = 1;
                            myHandler.sendMessage(msg);// 发送消息到子线程
                        }
                        LogUtil.i("没有找到可以的网络");
                        //Thread.currentThread().join();
                        return null;
                    }
                }
            }
        }
        return result;
    }
    
    /**
     * post请求 (如果网络不通,打开wifi,2g,3g去访问;如果再不通,关wifi,打开2g,3g去访问)
     * @param list 参数
     * @param url 访问地址
     * @param context 上下文
     * @param isNetWork true:外部有网络,不需要自己打开网络; false:外部没有网络,需要自己打开网络
     * @param poll 是否需要轮询访问
     * @return
     */
    public JSONObject requestPost(List<NameValuePair> list, String url, Context context, boolean isNetWork, boolean poll) {
        JSONObject jsonObject = null;
        if (poll) {// 需要轮询访问
            for (int i = 0; i < 7; i++) {
                try {
                    if (i == 0) {
                        if (isNetWork) {// 外部有网络,不需要自己打开网络
                            LogUtil.i(tag, "轮询次数i=" + i);
                            jsonObject = requestPost(list, url);
                        } else {// 外部没有网络,需要自己打开网络
                            if (openNetwork(context)) {
                                LogUtil.i(tag, "轮询次数i=" + i);
                                jsonObject = requestPost(list, url);
                            } else {
                                LogUtil.i(tag, "不能打开网络i=" + i);
                            }
                        }
                    } else if (i == 1) {
                        Thread.sleep(1000 * 60 * 2);
                        if (isNetWork) {// 外部有网络,不需要自己打开网络
                            LogUtil.i(tag, "轮询次数i=" + i);
                            jsonObject = requestPost(list, url);
                        } else {// 外部没有网络,需要自己打开网络
                            if (openNetwork(context)) {
                                LogUtil.i(tag, "轮询次数i=" + i);
                                jsonObject = requestPost(list, url);
                            } else {
                                LogUtil.i(tag, "不能打开网络i=" + i);
                            }
                        }
                    } else if (i == 2) {
                        Thread.sleep(1000 * 60 * 10);
                        if (isNetWork) {
                            LogUtil.i(tag, "轮询次数i=" + i);
                            jsonObject = requestPost(list, url);
                        } else {// 外部没有网络,需要自己打开网络
                            if (openNetwork(context)) {
                                LogUtil.i(tag, "轮询次数i=" + i);
                                jsonObject = requestPost(list, url);
                            } else {
                                LogUtil.i(tag, "不能打开网络i=" + i);
                            }
                        }
                    } else if (i == 3) {
                        Thread.sleep(1000 * 60 * 60);
                        if (isNetWork) {
                            LogUtil.i(tag, "轮询次数i=" + i);
                            jsonObject = requestPost(list, url);
                        } else {// 外部没有网络,需要自己打开网络
                            if (openNetwork(context)) {
                                LogUtil.i(tag, "轮询次数i=" + i);
                                jsonObject = requestPost(list, url);
                            } else {
                                LogUtil.i(tag, "不能打开网络i=" + i);
                            }
                        }
                    } else if (i == 4) {
                        Thread.sleep(1000 * 60 * 60 * 2);
                        if (isNetWork) {
                            LogUtil.i(tag, "轮询次数i=" + i);
                            jsonObject = requestPost(list, url);
                        } else {// 外部没有网络,需要自己打开网络
                            if (openNetwork(context)) {
                                LogUtil.i(tag, "轮询次数i=" + i);
                                jsonObject = requestPost(list, url);
                            } else {
                                LogUtil.i(tag, "不能打开网络i=" + i);
                            }
                        }
                    } else if (i == 5) {
                        Thread.sleep(1000 * 60 * 60 * 6);
                        if (isNetWork) {
                            LogUtil.i(tag, "轮询次数i=" + i);
                            jsonObject = requestPost(list, url);
                        } else {// 外部没有网络,需要自己打开网络
                            if (openNetwork(context)) {
                                LogUtil.i(tag, "轮询次数i=" + i);
                                jsonObject = requestPost(list, url);
                            } else {
                                LogUtil.i(tag, "不能打开网络i=" + i);
                            }
                        }
                    } else if (i == 6) {
                        Thread.sleep(1000 * 60 * 60 * 15);
                        if (isNetWork) {
                            LogUtil.i(tag, "轮询次数i=" + i);
                            jsonObject = requestPost(list, url);
                        } else {// 外部没有网络,需要自己打开网络
                            if (openNetwork(context)) {
                                LogUtil.i(tag, "轮询次数i=" + i);
                                jsonObject = requestPost(list, url);
                            } else {
                                LogUtil.i(tag, "不能打开网络i=" + i);
                            }
                        }
                    }

                    JsonUtil jsonUtil = new JsonUtil();
                    String code = jsonUtil.paresJSON(jsonObject, "code");

                    if (SystemCode.SUCCEED.equals(code)) {
                        LogUtil.i(tag, "访问成功!");
                        break;
                    } else {
                        LogUtil.i(tag, "访问失败!");
                    }
                } catch (UnknownHostException e) {
                    LogUtil.i(tag, "wifi不通,打开2G和3G");
                    // 关闭wifi,打开2g,3g
                    if (openMobileNetwork(context)) {
                        try {
                            LogUtil.i(tag, "wifi关闭了,2G打开了");
                            jsonObject = requestPost(list, url);
                        } catch (UnknownHostException e1) {
                            LogUtil.i(tag, "网络不通1!");
                            e1.printStackTrace();
                        } catch (IOException e1) {
                            LogUtil.i(tag, "IO异常1!");
                            e1.printStackTrace();
                        } catch (JSONException e1) {
                            LogUtil.i(tag, "json解析出错1!");
                            e1.printStackTrace();
                        } catch (Exception e1) {
                            LogUtil.i(tag, "其他异常1!");
                            e1.printStackTrace();
                        }
                    } else {
                        LogUtil.i(tag, "不能打开网络1!");
                    }

                    // LogUtil.i(tag, "网络不通1!");
                    // LogUtil.i(e.toString());
                } catch (IOException e) {
                    LogUtil.i(tag, "IO异常2!");
                    LogUtil.i(e.toString());
                } catch (JSONException e) {
                    LogUtil.i(tag, "json解析出错2!");
                    LogUtil.i(e.toString());
                } catch (Exception e) {
                    LogUtil.i(tag, "其他异常2!");
                    LogUtil.i(e.toString());
                }
            }

        } else {// 不需要轮询访问
            if (isNetWork) {// 外部有网络,不需要自己打开网络
                try {
                    jsonObject = requestPost(list, url);
                } catch (UnknownHostException e) {
                    LogUtil.i(tag, "网络不通3!");
                    LogUtil.i(e.toString());
                } catch (IOException e) {
                    LogUtil.i(tag, "IO异常3!");
                    LogUtil.i(e.toString());
                } catch (JSONException e) {
                    LogUtil.i(tag, "json解析出错3!");
                    LogUtil.i(e.toString());
                } catch (Exception e) {
                    LogUtil.i(tag, "其他异常3!");
                    LogUtil.i(e.toString());
                }
            } else {// 外部没有网络,需要自己打开网络
                if (openNetwork(context)) {
                    try {
                        jsonObject = requestPost(list, url);
                    } catch (UnknownHostException e) {
                        // 关闭wifi,打开2g,3g
                        if (openMobileNetwork(context)) {
                            try {
                                jsonObject = requestPost(list, url);
                            } catch (UnknownHostException e1) {
                                LogUtil.i(tag, "网络不通4!");
                                e1.printStackTrace();
                            } catch (IOException e1) {
                                LogUtil.i(tag, "IO异常4!");
                                e1.printStackTrace();
                            } catch (JSONException e1) {
                                LogUtil.i(tag, "json解析出错4!");
                                e1.printStackTrace();
                            } catch (Exception e1) {
                                LogUtil.i(tag, "其他异常4!");
                                e1.printStackTrace();
                            }
                        } else {
                            LogUtil.i(tag, "不能打开网络4!");
                        }
                        // LogUtil.i(tag, "网络不通3!");
                        // LogUtil.i(e.toString());
                    } catch (IOException e) {
                        LogUtil.i(tag, "IO异常5!");
                        LogUtil.i(e.toString());
                    } catch (JSONException e) {
                        LogUtil.i(tag, "json解析出错5!");
                        LogUtil.i(e.toString());
                    } catch (Exception e) {
                        LogUtil.i(tag, "其他异常5!");
                        LogUtil.i(e.toString());
                    }
                } else {
                    LogUtil.i(tag, "不能打开网络5!");
                }
            }
        }

        return jsonObject;
    }

    /**
     * 打开wifi,2g,3g
     * 
     * @param context
     * @return 是否有网络
     */
    private boolean openNetwork(Context context) {


        LogUtil.i(tag, "打开移网");
        // 打开移网
        NetworkMgr network = new NetworkMgr();
        if (!ParamValue.TWOG.equals(network.getNetworkType(context))
                && !ParamValue.TWOG.equals(network.getNetworkType(context))) {
            // 开启移动网络
            MobileNetworkMgr mobileNetworkAdmin = new MobileNetworkMgr();
            mobileNetworkAdmin.OpenMobileNetwork(context);
        }

        LogUtil.i(tag, "打开wifi");
        // 打开wifi
        WifiManager wifiManager = (WifiManager) context
                .getSystemService(Context.WIFI_SERVICE);
        int timetag = 0;
        if (ParamValue.NONE.equals(network.getNetworkType(context))) {
            wifiManager.setWifiEnabled(true);
        }

        LogUtil.i(tag, "轮循等待");
        while (ParamValue.NONE.equals(network.getNetworkType(context))) {
            ++timetag;
            if (timetag == 20) {
                break;
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                LogUtil.i(e.toString());
            }
        }
        if (ParamValue.NONE.equals(network.getNetworkType(context))) {
            LogUtil.i(tag, "网络打不开!");
            return false;
        } else {
            LogUtil.i(tag, "网络已打开!");
            return true;
        }
    }
    
    /**
     * 打开wifi
     * 
     * @param context
     * @return 是否有网络
     */
    private boolean openWifi(Context context) {
        NetworkMgr network = new NetworkMgr();
        LogUtil.i(tag, "打开wifi");
        // 打开wifi
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        int timetag = 0;
        if (ParamValue.NONE.equals(network.getNetworkType(context))) {
            wifiManager.setWifiEnabled(true);
        }
        
        LogUtil.i(tag, "轮循等待打开wif");
        while (ParamValue.NONE.equals(network.getNetworkType(context))) {
            ++timetag;
            if (timetag == 20) {
                break;
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                LogUtil.i(e.toString());
            }
        }
        if (ParamValue.NONE.equals(network.getNetworkType(context))) {
            LogUtil.i(tag, "wifi网络打不开!");
            return false;
        } else {
            LogUtil.i(tag, "wifi网络已打开!");
            return true;
        }
    }

    /**
     * 关闭wifi,打开移动网络
     * 
     * @param context
     * @return 是否有网络
     */
    private boolean openMobileNetwork(Context context) {

        //关闭wifi
        LogUtil.i(tag, "关闭wifi");
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        NetworkMgr network = new NetworkMgr();
        int timetag = 0;
        if (wifiManager.isWifiEnabled()) {
            System.out.println("into wifi enable");
            wifiManager.setWifiEnabled(false);
        }
        while (wifiManager.isWifiEnabled()) {
            ++timetag;
            if (timetag == 5) {
                break;
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                LogUtil.i(e.toString());
            }
        }

        if (!ParamValue.TWOG.equals(network.getNetworkType(context)) && !ParamValue.THREEG.equals(network.getNetworkType(context))) {
            // 开启移动网络
            LogUtil.i(tag, "开启移动网络");
            MobileNetworkMgr mobileNetworkAdmin = new MobileNetworkMgr();
            mobileNetworkAdmin.OpenMobileNetwork(context);
            int openTime = 0;
            while (ParamValue.NONE.equals(network.getNetworkType(context))) {
                ++openTime;
                if (openTime == 20) {
                    break;
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    LogUtil.i(e.toString());
                }
            }
        }

        if (!ParamValue.TWOG.equals(network.getNetworkType(context)) && !ParamValue.THREEG.equals(network.getNetworkType(context))) {
            LogUtil.i(tag, "不能打开2G,3G");
            return false;
        } else {
            LogUtil.i(tag, "已关闭WIFI,打开2G,3G");
            return true;
        }

    }
    
    /**
     * 关闭wifi,打开移动网络
     * @param context 上下文
     */
//    @Deprecated
//    private void openMobileNetwork2(Context context) {
//        try {
//            //关闭wifi
//            LogUtil.i(tag, "关闭wifi");
//            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
//            int timetag = 0;
//            if (wifiManager.isWifiEnabled()) {
//                System.out.println("into wifi enable");
//                wifiManager.setWifiEnabled(false);
//            }
//            while (wifiManager.isWifiEnabled()) {
//                ++timetag;
//                if (timetag == 5) {
//                    break;
//                }
//                Thread.sleep(1000);
//            }
//            
//            NetworkMgr network = new NetworkMgr();
//            if (!ParamValue.TWOG.equals(network.getNetworkType(context)) && !ParamValue.THREEG.equals(network.getNetworkType(context))) {
//                // 开启移动网络
//                LogUtil.i(tag, "开启移动网络");
//                MobileNetworkMgr mobileNetworkAdmin = new MobileNetworkMgr();
//                mobileNetworkAdmin.OpenMobileNetwork(context);
//                int openTime = 0;
//                while (ParamValue.NONE.equals(network.getNetworkType(context))) {
//                    ++openTime;
//                    if (openTime == 8) {
//                        break;
//                    }
//                    Thread.sleep(1000);
//                }
//            }
//            
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        
//    }
}
原文地址:https://www.cnblogs.com/code4app/p/3759002.html