Java學習--HttpURLConnection傳送post請求
阿新 • • 發佈:2018-10-31
import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; /** * Created by Fairy on 2017/12/27. */ public class WebPost { private static BufferedReader reader; private static StringBuffer response; public static void doWebPost(String httpMethodStr, String parameterData,String token) throws Exception{ try { URL url = new URL(httpMethodStr);//建立連線 URLConnection urlConnection = url.openConnection();//宣告一個抽象類URLConnection的引用urlConnection // 此處的urlConnection物件實際上是根據URL的請求協議(此處是http)生成的URLConnection類的子類HttpURLConnection,故此處最好將其轉化為 // HttpURLConnection型別的物件,以便用到HttpURLConnection更多的API.如下: HttpURLConnection connection = (HttpURLConnection) urlConnection; //宣告一個抽象類HttpURLConnection的引用connection //URLConnection和HttpURLConnection使用的都是java.net中的類,屬於標準的java介面。 //HttpURLConnection繼承自URLConnection,差別在與HttpURLConnection僅僅針對Http連線。 connection.setRequestMethod("POST");//設定請求方式為"POST",預設為"GET" connection.setDoOutput(true);//設定是否向HttpUrlConnction輸出,因為這個是POST請求,引數要放在http正文內,因此需要設為true,預設情況下是false connection.setDoInput(true);//設定是否向HttpUrlConnection讀入,預設情況下是true connection.setUseCaches(false);//POST請求不能使用快取(POST不能被快取) connection.setInstanceFollowRedirects(true);//設定只作用於當前的例項 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); connection.setRequestProperty("Cookie", "SSID=" + token); connection.connect();//connect()函式會根據HttpURLConnection物件的配置值 生成http頭部資訊,因此在呼叫connect函式之前,就必須把所有的配置準備好 //HttpURLConnection是基於HTTP協議的,其底層通過socket通訊實現。如果不設定超時(timeout),在網路異常的情況下,可能會導致程式僵死而不繼續往下執行。 connection.setConnectTimeout(20*1000);//設定連線主機超時(單位:毫秒) connection.setReadTimeout(20*1000);//設定從主機讀取資料超時(單位:毫秒) //正文的內容是通過outputStream流寫入的,實際上outputStream不是一個網路流,充其量是個字串流,往裡面寫入的東西不會立即傳送到網路, //而是存在於記憶體緩衝區中,待outputStream流關閉時,根據輸入的內容生成http正文。至此,http請求的東西已經全部準備就緒 DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream()); byte[] t = parameterData.getBytes("utf-8"); dataOutputStream.write(t); dataOutputStream.flush(); dataOutputStream.close(); //對outputStream的寫操作,又必須要在inputStream的讀操作之前 InputStream inputStream = connection.getInputStream();// <===注意,實際傳送請求的程式碼段就在這裡 //讀取響應 reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); String lines; response = new StringBuffer(""); while ((lines = reader.readLine()) != null) { response.append(lines); response.append("\r\n"); } }catch (MalformedURLException e){ e.printStackTrace(); }catch (UnsupportedEncodingException e){ e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); } } public static String returnResult(){ return response.toString(); } }