日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HttpURLConnection解析

發布時間:2024/4/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HttpURLConnection解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

請求響應流程

設置連接參數的方法

?

?

  • setAllowUserInteraction
  • setDoInput
  • setDoOutput
  • setIfModifiedSince
  • setUseCaches
  • setDefaultAllowUserInteraction
  • setDefaultUseCaches

設置請求頭或響應頭

HTTP請求允許一個key帶多個用逗號分開的values,但是HttpURLConnection只提供了單個操作的方法:

  • setRequestProperty(key,value)
  • addRequestProperty(key,value)

setRequestProperty和addRequestProperty的區別就是,setRequestProperty會覆蓋已經存在的key的所有values,有清零重新賦值的作用。而addRequestProperty則是在原來key的基礎上繼續添加其他value。

?

發送URL請求

?

建立實際連接之后,就是發送請求,把請求參數傳到服務器,這就需要使用outputStream把請求參數傳給服務器:

  • getOutputStream?

?

獲取響應

請求發送成功之后,即可獲取響應的狀態碼,如果成功既可以讀取響應中的數據,獲取這些數據的方法包括:

  • getContent
  • getHeaderField
  • getInputStream?

對于大部分請求來說,getInputStream和getContent是用的最多的。

相應的信息頭用以下方法獲取:

  • getContentEncoding
  • getContentLength
  • getContentType
  • getDate
  • getExpiration
  • getLastModifed?

HttpURLConnection

任何網絡連接都需要經過socket才能連接,HttpURLConnection不需要設置socket,所以,HttpURLConnection并不是底層的連接,而是在底層連接上的一個請求。這就是為什么HttpURLConneciton只是一個抽象類,自身不能被實例化的原因。HttpURLConnection只能通過URL.openConnection()方法創建具體的實例。

雖然底層的網絡連接可以被多個HttpURLConnection實例共享,但每一個HttpURLConnection實例只能發送一個請求。請求結束之后,應該調用HttpURLConnection實例的InputStream或OutputStream的close()方法以釋放請求的網絡資源,不過這種方式對于持久化連接沒用。對于持久化連接,得用disconnect()方法關閉底層連接的socket。

?

創建HttpURLConnection

URL url = new URL("http://localhost:8080/xxx.do"); URLConnection rulConnection = url.openConnection();// 此處的urlConnection對象實際上是根據URL的 // 請求協議(此處是http)生成的URLConnection類 // 的子類HttpURLConnection,故此處最好將其轉化 // 為HttpURLConnection類型的對象,以便用到 // HttpURLConnection更多的API.如下: HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection;

設置HttpURLConnection參數

// 設定請求的方法為"POST",默認是GET httpUrlConnection.setRequestMethod("POST"); // 設置是否向httpUrlConnection輸出,因為這個是post請求,參數要放在 // http正文內,因此需要設為true, 默認情況下是false; httpUrlConnection.setDoOutput(true); // 設置是否從httpUrlConnection讀入,默認情況下是true; httpUrlConnection.setDoInput(true); // Post 請求不能使用緩存 httpUrlConnection.setUseCaches(false); // 設定傳送的內容類型是可序列化的java對象 // (如果不設此項,在傳送序列化對象時,當WEB服務默認的不是這種類型時可能拋java.io.EOFException) httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object"); // 連接,從上述url.openConnection()至此的配置必須要在connect之前完成, httpUrlConnection.connect();

URLConnection建立連接

// 此處getOutputStream會隱含的進行connect(即:如同調用上面的connect()方法, // 所以在開發中不調用上述的connect()也可以)。 OutputStream outStrm = httpUrlConnection.getOutputStream(); <p>getInputStream()也是同理。</p>

HttpURLConnection發送請求

// 現在通過輸出流對象構建對象輸出流對象,以實現輸出可序列化的對象。 ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); // 向對象輸出流寫出數據,這些數據將存到內存緩沖區中 objOutputStrm.writeObject(new String("我是測試數據")); // 刷新對象輸出流,將任何字節都寫入潛在的流中(些處為ObjectOutputStream) objOutputStm.flush(); // 關閉流對象。此時,不能再向對象輸出流寫入任何數據,先前寫入的數據存在于內存緩沖區中, // 在調用下邊的getInputStream()函數時才把準備好的http請求正式發送到服務器 objOutputStm.close();

HttpURLConnection: Post ?發送給服務器后臺 訂單信息, 后臺返回 ?能夠支付的真實訂單信息?

1 public class getChannelResult implements Callable<String>{ 2 // private String urlServer = "https://pay.openspeech.cn/api/order_submit"; 3 private String urlServer = "http://test.xfinfr.com/drippay/api/order_submit"; 4 private String payChannel; 5 6 public getChannelResult(String channel){ 7 payChannel = channel; 8 } 9 10 @Override 11 public String call() throws Exception { 12 13 //初始化訂單信息,獲得和后臺交互的 json串 14 OrderSubmit.Builder builder = new OrderSubmit.Builder(); 15 builder.setAmount(1); 16 builder.setChannel(payChannel); 17 OrderSubmit orderSubmit = null; 18 try { 19 orderSubmit = builder.build(); 20 } catch (Exception e) { 21 e.printStackTrace(); 22 } 23 JSONObject json = orderSubmit.toJson(); 24 25 //建立網絡連接,得到后臺響應的訂單信息 26 HttpURLConnection urlConnection = null; 27 StringBuilder response = new StringBuilder(); 28 BufferedReader reader = null; 29 try { 30 URL url = new URL(urlServer); 31 urlConnection = (HttpURLConnection) url.openConnection(); 32 urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 33 urlConnection.setRequestProperty("Accept", "application/json"); 34 urlConnection.setConnectTimeout(15000); 35 urlConnection.setRequestMethod("POST"); 36 urlConnection.setDoInput(true); 37 urlConnection.setDoOutput(true); 38 urlConnection.setUseCaches(false); 39 urlConnection.connect(); 40 41 DataOutputStream dataJson = new DataOutputStream(urlConnection.getOutputStream()); 42 dataJson.write(json.toString().getBytes()); 43 dataJson.flush(); 44 dataJson.close(); 45 46 int responseCode = urlConnection.getResponseCode(); 47 Log.d(TAG, "call: "+responseCode); 48 // if (200 == responseCode) { 49 InputStream in = urlConnection.getInputStream(); 50 reader = new BufferedReader(new InputStreamReader(in)); 51 String line; 52 while ((line = reader.readLine()) != null) { 53 response.append(line); 54 } 55 // } 56 57 } catch (Exception e) { 58 e.printStackTrace(); 59 } finally { 60 if (null != reader) { 61 try { 62 reader.close(); 63 } catch (IOException e) { 64 e.printStackTrace(); 65 } 66 } 67 if (urlConnection != null) { 68 urlConnection.disconnect(); 69 } 70 } 71 return response.toString(); 72 } 73 } View Code

?

參考:?

  http://blog.csdn.net/woxueliuyun/article/details/43267365

?

?

轉載于:https://www.cnblogs.com/NeilZhang/p/7018107.html

總結

以上是生活随笔為你收集整理的HttpURLConnection解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。