1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢(xún)
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
      Java訪問(wèn)HTTP服務(wù)器和FTP服務(wù)器的方法

      這篇文章主要為大家分享Java訪問(wèn)HTTP服務(wù)器和FTP服務(wù)器的方法。在實(shí)現(xiàn)訪問(wèn)的過(guò)程還講解了各類(lèi)軟件或工具的使用方法,希望大家通過(guò)這篇文章能有所收獲。

      為揭陽(yáng)等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及揭陽(yáng)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、揭陽(yáng)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

      一、用Java Socket訪問(wèn)HTTP服務(wù)器

      通過(guò)Socket訪問(wèn)HTTP服務(wù)器,需要了解具體的HTTP協(xié)議通信細(xì)節(jié),由Socket獲得輸入流和輸出流,然后通過(guò)輸入流發(fā)送HTTP請(qǐng)求數(shù)據(jù),通過(guò)輸出流讀取HTTP響應(yīng)結(jié)果。程序得到了HTTP響應(yīng)結(jié)果后,需要對(duì)響應(yīng)頭和響應(yīng)正文進(jìn)行解析。

      這是最原始的方法,給程序員提供了很靈活地發(fā)揮空間,可以炮制各種各樣的HTTP請(qǐng)求數(shù)據(jù)。缺點(diǎn)是處理HTTP響應(yīng)結(jié)果比較麻煩。尤其是現(xiàn)在許多網(wǎng)站發(fā)回的數(shù)據(jù)會(huì)先進(jìn)行g(shù)zip壓縮。客戶(hù)端得到了這樣的數(shù)據(jù)后,還需要進(jìn)行解壓,才能得到真實(shí)的數(shù)據(jù)。

      這種方法的使用技巧和范例請(qǐng)參考 用Java套接字訪問(wèn)HTTP服務(wù)器讀取網(wǎng)頁(yè)數(shù)據(jù)

      二、用java.net.URL等類(lèi)訪問(wèn)HTTP服務(wù)器

      URL類(lèi)以及其相關(guān)的URLConnection類(lèi)稱(chēng)為客戶(hù)端協(xié)議處理框架,它對(duì)原始的HTTP通信細(xì)節(jié)進(jìn)行了封裝。程序員只需要提供一個(gè)URL地址,就能發(fā)送HTTP請(qǐng)求數(shù)據(jù)以及讀取HTTP響應(yīng)結(jié)果。如果服務(wù)器端對(duì)HTML文檔進(jìn)行了gzip壓縮,客戶(hù)端協(xié)議處理框架會(huì)對(duì)HTML文檔進(jìn)行解壓,再作為響應(yīng)結(jié)果的正文返回給客戶(hù)程序,這是比直接用Socket讀取HTML文檔更省力的地方。

      以下getByteSource()方法能根據(jù)給定的URL地址,返回相應(yīng)的響應(yīng)結(jié)果的正文部分的字節(jié)流,以byte[]形式返回。

       public static byte[] getByteSource(String  urlStr)throws IOException{
           URL url=new URL(urlStr);
      
          HttpURLConnection.setFollowRedirects(true);   //設(shè)置允許重定向
          //此處創(chuàng)建URLConnection對(duì)象時(shí),并不會(huì)進(jìn)行真實(shí)地與HTTP服務(wù)器的連接,
          //只有當(dāng)調(diào)用URLConnection的connect()方法,或者發(fā)送HTTP請(qǐng)求以及讀取HTTP響應(yīng)結(jié)果時(shí)才會(huì)連接服務(wù)器
          URLConnection connection=url.openConnection();  
          connection.setConnectTimeout(60000); //設(shè)置連接超時(shí)時(shí)間為60秒
          connection.setReadTimeout(60000);  //設(shè)置讀取數(shù)據(jù)超時(shí)時(shí)間為60秒
      
          //演示設(shè)置HTTP請(qǐng)求頭部的信息
          connection.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36");
          connection.setRequestProperty("Connection","keep-alive");
          connection.setRequestProperty("Content-Type","text/plain;charset=UTF-8");
          connection.setRequestProperty("X-Buffalo-Version","2.0-alpha3");
          connection.setRequestProperty("Sec-Fetch-Mode","cors");
          connection.setRequestProperty("Accept"," */*");
          connection.setRequestProperty("Sec-Fetch-Site","same-origin");
          connection.setRequestProperty("Accept-Encoding","deflate, br");
          connection.setRequestProperty("Accept-Language","zh-CN,zh;q=0.9");  
      
         //演示遍歷訪問(wèn)響應(yīng)結(jié)果的頭部信息
         Map> headers=connection.getHeaderFields();
         Set keySet=headers.keySet();
         for(String key:keySet){
            //響應(yīng)頭中的每一項(xiàng)可能有多個(gè)取值,此處僅打印第一個(gè)取值
           System.out.println(key+":"+headers.get(key).get(0));
         }
      
         //讀取響應(yīng)頭部的特定項(xiàng)的值
         String location=connection.getHeaderField("Location");
      
           //讀取響應(yīng)正文的數(shù)據(jù)
          InputStream in=connection.getInputStream();
          ByteArrayOutputStream buffer=new ByteArrayOutputStream();
          byte[] buff=new byte[1024];  
          int len=-1;
      
          while((len=in.read(buff))!=-1){
            buffer.write(buff,0,len);
          }
      
          return buffer.toByteArray();
        }  

      以下getStringSource()方法演示獲得HTML文本數(shù)據(jù)。它利用上面的getByteSource()方法得到HTTP響應(yīng)正文的字節(jié)流,再把它包裝成一個(gè)字符串對(duì)象。需要指定響應(yīng)正文的字符編碼。

       public static String getStringSource(String urlStr,String encode)throws IOException{
           byte[] buffer=getByteSource(urlStr);
           String data=new String(buffer,tencode);
          return data;  //把字節(jié)數(shù)組轉(zhuǎn)換為字符串
        }

      客戶(hù)端協(xié)議處理框架的更多使用技巧和范例請(qǐng)參考 用java.net.URL類(lèi)訪問(wèn)HTTP服務(wù)器讀取網(wǎng)頁(yè)數(shù)據(jù)

      三、用Selenium軟件API訪問(wèn)HTTP服務(wù)器

      Selenium是一個(gè)專(zhuān)業(yè)的爬蟲(chóng)軟件。它支持Java和Python等語(yǔ)言。當(dāng)通過(guò)上述java.net.URL類(lèi)來(lái)讀取網(wǎng)站的HTML文檔時(shí),有時(shí)候讀到的僅僅是JavaScript腳本,而真正的HTML文檔需要運(yùn)行JavaScript才能獲得。Selenium能夠利用Chrome瀏覽器或者是FireFox瀏覽器的驅(qū)動(dòng)程序來(lái)啟動(dòng)瀏覽器,由瀏覽器執(zhí)行JavaScript腳本,然后返回真實(shí)的HTML文檔。
      Selenium具有以下優(yōu)勢(shì):
      (1)利用瀏覽器動(dòng)態(tài)執(zhí)行JavaScript腳本的功能,獲得真正要訪問(wèn)的HTML文本數(shù)據(jù)。
      (2)對(duì)HTML文檔進(jìn)行了DOM(文檔對(duì)象模型)建模,可以方便地訪問(wèn)HTML文檔中各個(gè)元素的屬性。

      關(guān)于用Selenium獲取HTML文檔的方法和范例請(qǐng)參考:Java版Selenium使用chrome driver抓取動(dòng)態(tài)網(wǎng)頁(yè)

      Selenium讀取和處理HTML文檔比較方便,但是目前在抓取網(wǎng)頁(yè)圖片方面比較麻煩。一種做法是先把整個(gè)網(wǎng)頁(yè)進(jìn)行截屏,得到一個(gè)圖片。然后截取特定元素在整個(gè)圖片中所在的區(qū)域,獲得元素所對(duì)應(yīng)的圖片。這種做法的缺點(diǎn)是: 如果對(duì)網(wǎng)頁(yè)的截屏的大小取決于電腦屏幕的大小。對(duì)于需要通過(guò)滾動(dòng)屏幕才能顯示的網(wǎng)頁(yè)部分內(nèi)容,則不能一次性截屏。

      對(duì)于不在截屏圖片范圍內(nèi)的元素,如果試圖截取這個(gè)元素對(duì)應(yīng)區(qū)域的圖片,程序會(huì)拋出Outside of Raster的異常。

      關(guān)于用Selenium截取網(wǎng)頁(yè)圖片以及特定元素的圖片的方法和范例請(qǐng)參考: Java版Selenium 截取網(wǎng)頁(yè)上特定元素的圖片的方法

      如果用Selenium來(lái)抓圖比較方法,還可以使用java.net.URL或者Apache HttpClients來(lái)抓圖。關(guān)于把Selenium和java.net.URL類(lèi)結(jié)合使用,來(lái)讀取HTML文檔以及下載文檔中元素指定圖片的方法,請(qǐng)參考: 用Selenium 爬蟲(chóng)API和java.net.URL類(lèi)保存網(wǎng)頁(yè)上的圖片

      使用Selenium的另一個(gè)缺點(diǎn)是比較“笨重”,必須安裝Chrome瀏覽器,下載對(duì)應(yīng)的Chrome驅(qū)動(dòng)器程序,提供Selenium的多個(gè)類(lèi)庫(kù)文件。

      四、用Apache HttpClients下載網(wǎng)上的圖片等各種數(shù)據(jù)

      用java.net.URL來(lái)下載圖片數(shù)據(jù)時(shí),如果HTTP服務(wù)器端對(duì)圖片數(shù)據(jù)進(jìn)行了重定向,或者進(jìn)行了特殊格式的壓縮,有時(shí)還是無(wú)法獲取正確的原始圖片數(shù)據(jù)。在這種情況下,可以使用Apach HttpClients API。

      關(guān)于用Apache HttpClients來(lái)下載各種網(wǎng)頁(yè)數(shù)據(jù)的方法,請(qǐng)參考: 用Apache HttpClients下載網(wǎng)上的圖片等各種數(shù)據(jù)

      在實(shí)際應(yīng)用中,可以利用Selenium來(lái)讀取需要?jiǎng)討B(tài)執(zhí)行JavaScript腳本的網(wǎng)頁(yè),用Apache Clients來(lái)下載網(wǎng)頁(yè)中的圖片等數(shù)據(jù),這樣會(huì)解決抓取數(shù)據(jù)中遇到的各種障礙。

      五、用Apache FTPClient訪問(wèn)FTP服務(wù)器

      Java程序除了要訪問(wèn)HTTP服務(wù)器,還需要訪問(wèn)FTP服務(wù)器。Apache FTPClient API提供了訪問(wèn)FTP服務(wù)器的各種功能,包括:

      • 下載和上傳文件
      • 瀏覽FTP服務(wù)器端的文件信息
      • 在遠(yuǎn)程FTP服務(wù)器上創(chuàng)建或刪除文件以及目錄

      看完這篇文章,你們學(xué)會(huì)使用Java訪問(wèn)HTTP服務(wù)器和FTP服務(wù)器的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。


      本文名稱(chēng):Java訪問(wèn)HTTP服務(wù)器和FTP服務(wù)器的方法
      文章出自:http://ef60e0e.cn/article/ghieej.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        信阳市| 太康县| 镇安县| 尖扎县| 陆川县| 三穗县| 余干县| 保山市| 榆中县| 和静县| 汉沽区| 溆浦县| 英吉沙县| 拜城县| 昌乐县| 理塘县| 偃师市| 太仆寺旗| 定日县| 武夷山市| 黎川县| 治县。| 承德县| 台北县| 连江县| 星子县| 治县。| 甘孜县| 绿春县| 浙江省| 文昌市| 教育| 修水县| 丰县| 通州市| 苏尼特左旗| 徐州市| 织金县| 丰县| 九龙县| 神农架林区|