Java利用原始HttpURLConnection發送http請求數據小結


1,在post請求下,寫輸出應該在讀取之后,否則會拋出異常。

即操作OutputStream對象應該在InputStreamReader之前。

2.conn.getResponseCode()獲取返回狀態碼最好放在讀寫完成之后,否則也會拋出異常。這里不知道是否是該方法會導致連接關閉,待驗證。

下面貼出工具類代碼

其中GET請求直接在requestUrl里面拼接,POST請求通過outputStr傳入。

/**
     * 發送https請求
     * @param requestUrl 請求地址
     * @param requestMethod 請求方式(GET、POST)
     * @param outputStr 提交的數據
     * @return JSONObject(通過JSONObject.get(key)的方式獲取json對象的屬性值)
     */
    public static WxApiResult httpsRequest(String requestUrl, String requestMethod, String outputStr) {
        WxApiResult message = new WxApiResult();
        try{
            TrustManager[] tm = { new MyX509TrustManager() };
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
            SSLSocketFactory ssf = sslContext.getSocketFactory();

            URL url = new URL(requestUrl);
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(ssf);

            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod(requestMethod);

            if(null != outputStr){
                OutputStream outputStream = conn.getOutputStream();
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.close();
            }

            InputStream inputStream = conn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String str = null;
            StringBuffer buffer = new StringBuffer();
            while ((str = bufferedReader.readLine()) != null){
                buffer.append(str);
            }
            if(conn.getResponseCode() == conn.HTTP_OK){
                message.setCode(0);
                message.setContent(buffer.toString());
            }else{
                message.setCode(-1);
                message.setContent("獲取返回狀態不對,返回狀態為:" + conn.getResponseCode());
            }

            // 釋放資源
            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();
            inputStream = null;
            conn.disconnect();

        }catch (ConnectException ce){
            log.error("連接超時:{}", ce);
            message.setCode(-1);
            message.setContent(ce.getMessage());
        }catch (Exception e){
            log.error("https請求異常:{}", e);
            message.setCode(-1);
            message.setContent(e.getMessage());
        }
        return message;
    }

 

 

 

 


免責聲明!

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



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