Java訪問HTTP服務(wù)器和FTP服務(wù)器的方法-創(chuàng)新互聯(lián)

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

成都創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)石臺,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

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

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

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

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

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

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

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

 public static byte[] getByteSource(String  urlStr)throws IOException{
   URL url=new URL(urlStr);

   HttpURLConnection.setFollowRedirects(true);  //設(shè)置允許重定向
   //此處創(chuàng)建URLConnection對象時,并不會進行真實地與HTTP服務(wù)器的連接,
   //只有當調(diào)用URLConnection的connect()方法,或者發(fā)送HTTP請求以及讀取HTTP響應結(jié)果時才會連接服務(wù)器
   URLConnection connection=url.openConnection();  
   connection.setConnectTimeout(60000); //設(shè)置連接超時時間為60秒
   connection.setReadTimeout(60000);  //設(shè)置讀取數(shù)據(jù)超時時間為60秒

   //演示設(shè)置HTTP請求頭部的信息
   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");  

  //演示遍歷訪問響應結(jié)果的頭部信息
  Map<String,List<String>> headers=connection.getHeaderFields();
  Set<String> keySet=headers.keySet();
  for(String key:keySet){
    //響應頭中的每一項可能有多個取值,此處僅打印第一個取值
   System.out.println(key+":"+headers.get(key).get(0));
  }

  //讀取響應頭部的特定項的值
  String location=connection.getHeaderField("Location");

   //讀取響應正文的數(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響應正文的字節(jié)流,再把它包裝成一個字符串對象。需要指定響應正文的字符編碼。

 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)換為字符串
  }

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

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

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

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

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

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

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

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

使用Selenium的另一個缺點是比較“笨重”,必須安裝Chrome瀏覽器,下載對應的Chrome驅(qū)動器程序,提供Selenium的多個類庫文件。

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

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

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

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

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

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

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

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文標題:Java訪問HTTP服務(wù)器和FTP服務(wù)器的方法-創(chuàng)新互聯(lián)
本文鏈接:http://muchs.cn/article30/popso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、網(wǎng)站策劃、Google、虛擬主機、做網(wǎng)站建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營