java 使用原生HttpURLConnection發送post請求


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import org.apache.log4j.Logger;

public class RequestDoPostUtil {
    private static Logger log = Logger.getLogger(RequestDoPostUtil.class);
    
    public static String doPost(String url, Map<String, Object> parameters) throws Exception {
        // 編碼請求參數
        String params = paramsConvert(parameters);
        URL restURL = new URL(url);
        
        log.info("鏈接:"+url);
        log.info("參數:"+parameters.toString());
        
        int t= 0;//調用接口出錯次數
        while(t<3) {
            try {
                /*
                 * 此處的urlConnection對象實際上是根據URL的請求協議(此處是http)生成的URLConnection類
                 * 的子類HttpURLConnection
                 */
                HttpURLConnection conn = (HttpURLConnection) restURL.openConnection();
//                conn.setConnectTimeout(5000);
//                conn.setReadTimeout(5000);
                // 請求方式
                conn.setRequestMethod("POST");
                // 設置是否從httpUrlConnection讀入,默認情況下是true; httpUrlConnection.setDoInput(true);
                conn.setDoOutput(true);
                // allowUserInteraction 如果為 true,則在允許用戶交互(例如彈出一個驗證對話框)的上下文中對此 URL 進行檢查。
                conn.setAllowUserInteraction(false);

                PrintStream ps = new PrintStream(conn.getOutputStream());
                ps.print(params);

                ps.close();

                BufferedReader bReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

                String line, resultStr = "";

                while (null != (line = bReader.readLine())) {
                    resultStr += line;
                }
                System.out.println(resultStr);
                bReader.close();

                return resultStr;
            } catch (Exception e) {
                t++;
                log.warn("=======>出錯次數(requset error ):" + t);
                e.printStackTrace();
            }
        }
        
        throw new Exception("網絡異常,請稍后再試");

    }
    
    /**
     * 參數類型轉換
     * 
     * @param parameters
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String paramsConvert(Map<String, Object> parameters) throws UnsupportedEncodingException {
        StringBuffer sb = new StringBuffer();// 處理請求參數
        // 編碼請求參數
        for (String name : parameters.keySet()) {
            Object object = parameters.get(name);
            log.info("類型:"+object.getClass());
            if(object instanceof Integer) {
                sb.append(name).append("=").append(java.net.URLEncoder.encode((String)object, "UTF-8"))
                .append("&");
            }else if(object instanceof Date) {
                Calendar cal = Calendar.getInstance();
                cal.setTime((Date)object);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                sb.append(name).append("=").append(java.net.URLEncoder.encode(sdf.format(cal.getTime()), "UTF-8"))
                .append("&");
            }else{
                if(object.getClass().isArray()) {//判斷是否是字符串數組
                    String[] values = (String[])object;
                    for(String va : values) {
                        sb.append(name).append("=").append(java.net.URLEncoder.encode((String) va, "UTF-8"))
                        .append("&");
                    }
                }else {
                    sb.append(name).append("=").append(java.net.URLEncoder.encode((String) parameters.get(name), "UTF-8"))
                    .append("&");
                }
            }
        }
        return sb.toString().substring(0, sb.toString().length()-1);
    }
    
    public static void main(String[] args) {
        int s = 0;
        Object o = (Object)s;
        log.info(o.getClass());
        Integer a = 0;
        log.info(a.getClass());
        Date b = new Date();
        log.info(b.getClass());
        String c = "";
        log.info(c.getClass());
        String [] d = new String[2];
        log.info(d.getClass());
    }
}

 調用

String doPost = RequestDoPostUtil.doPost(sysParam.getParamValue(), param);
JSONObject ret = JSONObject.fromObject(doPost);
String code = ret.getString("code");
if("0".equals(code)) {
   map2= (List<Map<String, Object>>)ret.getJSONObject("data").get("list");
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM