1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          關于UrlHttpConnection.setRequestProperty的調用順序問題的驗證「建議收藏」

          來源:互聯網轉載 時間:2023-12-14 14:29:51

          在Android項目中使用到了HttpURLConnection請求資源,對于其中的方法setrequestproperty()的調用順序有些疑惑。

          API注釋如下所示:

          即:這個方法只能夠在連接建立之前調用。

          也就是說,該方法只能在連接建立之前調用才能使得設置的相應參數生效。


          我的問題是:如果調用了setRequestProperty(name,value)之后沒有明確調用connect()方法,那設置的參數是否會生效呢?

          第一直覺是如果調用了setRequestProperty(name,value)之后沒有明確調用connect()方法,那么設置的對應參數是不會生效的!

          為了驗證我的想法,做了如下驗證:

          實驗一:在調用setRequestProperty(name,value)之后,調用getInputStream()之前沒有明確調用connect()方法,代碼如下所示:

          String resource = “http://www.blogjava.net/supercrsky/articles/247449.html”;
          URL url = new URL(resource);
          HttpURLConnection conn = (HttpURLConnection)url.openConnection();
          conn.setRequestProperty(“Content-Type”, “text/plain; charset=utf-8”);
          //conn.connect();
          InputStream is = conn.getInputStream();

          byte[] buffer = new byte[1024];
          int count = -1;
          ByteArrayOutputStream bos = new ByteArrayOutputStream();
          while((count = is.read(buffer)) > 0) {

          bos.write(buffer, 0, count);
          }
          buffer = bos.toByteArray();
          System.out.println(new String(buffer,”UTF-8″));
          conn.disconnect();

          運行程序,抓包結果:

          GET /supercrsky/articles/247449.html HTTP/1.1
          Content-Type: text/plain; charset=utf-8 // 顯然,設置的屬性生效了!
          User-Agent: Java/1.6.0_21
          Host: www.blogjava.net
          Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
          Connection: keep-alive


          實驗二:在調用setRequestProperty(name,value)之后,調用getInputStream()之前明確調用connect()方法,代碼如下所示:

          String resource = “http://www.blogjava.net/supercrsky/articles/247449.html”;
          URL url = new URL(resource);
          HttpURLConnection conn = (HttpURLConnection)url.openConnection();
          conn.setRequestProperty(“Content-Type”, “text/plain; charset=utf-8”);
          conn.connect();
          InputStream is = conn.getInputStream();

          byte[] buffer = new byte[1024];
          int count = -1;
          ByteArrayOutputStream bos = new ByteArrayOutputStream();
          while((count = is.read(buffer)) > 0) {

          bos.write(buffer, 0, count);
          }
          buffer = bos.toByteArray();
          System.out.println(new String(buffer,”UTF-8″));
          conn.disconnect();

          運行程序,抓包結果:

          GET /supercrsky/articles/247449.html HTTP/1.1
          Content-Type: text/plain; charset=utf-8 // 顯然,設置的屬性也生效了!
          User-Agent: Java/1.6.0_21
          Host: www.blogjava.net
          Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
          Connection: keep-alive


          結論:

          1. 很顯然,不論是否明確調用connect()方法,通過setRequestProperty(name,value)設置的屬性都生效了,那這是為什么呢?

          經過一番查證,原來是在調用getInputStream()方法中會檢查連接是否已經建立,如果沒有建立,則會調用connect()方法,所以疑惑解開了!

          原來是在調用getInputStream()的時候會做連接是否建立的檢查!


          2. 那么,在寫代碼的時候是否需要明確調用connect()呢?

          個人建議還是明確調用一些比較好,因為這樣對于程序員自己來說是一個明確的控制,否則埋藏一些隱性的BUG,難以察覺。


          相關資料:

          (1)參考:http://www.blogjava.net/supercrsky/articles/247449.html

          (2)HttpURLConnection源碼:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/net/www/protocol/http/HttpURLConnection.java#HttpURLConnection.plainConnect%28%29






          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          蘋果11省電設置?蘋果11可以內步驟并且省電:1、然后打開可以設置,向下滑動列表,不能找到電池菜單,進入頁面,將低電量模式右邊的開關開啟;2、降底手機屏幕亮度,在“設置里”里“沒顯示與亮度”,直接關閉手機的“自動亮度調節”,并將屏幕亮度恒定在40%左右;3、會減少手機又出現在鎖屏上的推送通知數量,直接進入“設置”,在“通知”里,直接點擊查找app,中,選擇性關掉或所有的關閉;4、關掉手機的健康探測...

          華為p40pro直播清晰度怎樣?很高興啊問你的問題,我是華強北阿浪同學關注我手機知識全清楚。要明白了華為p40pro網絡直播清晰度如何能就需要先了解手機攝像頭的參數華為p40pro后置攝像頭是5000萬像素主攝4000萬像素超廣角鏡頭800萬像素超級變焦攝像頭800萬像素長焦攝像頭3D深覺鏡頭巳經達到了相機級像素前置攝像頭呢是3200萬像素微距攝像頭也是相機級像素傳感器類型tRYYB傳感器型號t索...

          蚌埠怎么讀?你好蚌埠拼音:bngb蚌埠市,安徽省第一個地級市、省轄市(公元1947年),位于安徽省東北部,有蚌山區、禹會區、淮上詳gtgt。安徽蚌埠怎么念?1.clam發音為:bng,bng,聲母:b,韻母:ang和eng,聲調:四聲。2.發音為:b,聲母:B,韻母:U,聲調:四聲。蚌埠,簡稱“蚌埠”,或稱明珠市,是安徽省的一個地級市。蚌埠位于東部,長江三角洲西部,安徽省東北部,淮河中游,南北地理...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>