欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java網(wǎng)絡(luò)通信中URL與HTTP編程技術(shù)詳解

 更新時間:2023年11月24日 10:32:03   作者:一一哥Sun  
要想實現(xiàn)網(wǎng)絡(luò)編程,除了可以使用Socket之外,我們還可以利用URL編程或HTTP編程技術(shù),所以今天這篇文章,就給大家介紹一下URL編程和HTTP編程技術(shù),看看這兩種技術(shù)有什么特點,文中有詳細(xì)的代碼講解,需要的朋友可以參考下

一. URL簡介

要想搞清楚URL編程,我們得先來看看什么是URL,所以先來給大家介紹一下URL的概念。

1. 概念

URL(Uniform Resource Locator,統(tǒng)一資源定位符) ,主要用于標(biāo)識和定位互聯(lián)網(wǎng)上的資源,例如網(wǎng)頁、圖片、音頻、視頻等。通過URL,我們可以向服務(wù)器發(fā)送請求,獲取需要的資源。

2. 組成

一個URL可以由多個部分組成,包括協(xié)議、主機名、路徑和查詢參數(shù)等。常見的URL格式如下所示:

#基本組成
protocol://host:port/path?query

#例如
http://www.qfedu.com:80/login.html?username=syc

其中,各部分含義如下所示:

  • protocol:協(xié)議部分,可以是HTTP、FTP等;
  • host:主機名或IP地址,例如 www.mobiletrain.org
  • port:端口號,例如80、8080等;
  • path:路徑,用于標(biāo)識具體的資源位置,例如/index.html;
  • query:查詢參數(shù),用于傳遞具體的參數(shù)給服務(wù)器,例如?key1=value1&key2=value2。

了解了URL的含義之后,我們就可以開始進行URL編程了。

二. URL編程

1. 簡介

URL編程也是Java中用于訪問互聯(lián)網(wǎng)資源的一種標(biāo)準(zhǔn)化方式。通過URL編程,我們可以基于HTTP、FTP等協(xié)議,方便地獲取網(wǎng)頁、圖片、音頻、視頻等資源。

另外我們也可以通過URL編程中的URLConnection、HttpURLConnection等類,向Web服務(wù)器或HTTP服務(wù)器發(fā)送請求,來建立與Web或HTTP服務(wù)器的連接,發(fā)送GET或POST請求,并讀取服務(wù)器返回的響應(yīng)信息。

接下來給大家分別介紹一下URL、URLConnection等與URL編程相關(guān)的核心類。

2. URL類

要實現(xiàn)URL編程,首先我們得使用java.net.URL類來創(chuàng)建一個URL對象,然后使用該對象來獲取指定資源的輸入流。

URL類給我們提供了多個構(gòu)造方法,其中最常用的是使用URL字符串來創(chuàng)建URL對象。例如,以下代碼就是通過URL字符串來創(chuàng)建一個URL對象:

URL url = new URL("<www.mobiletrain.org>");

利用這個URL對象,我們可以進一步使用openStream()方法來獲取指定資源的輸入流。例如,以下代碼就獲取了指定資源的輸入流:

InputStream input = url.openStream();

在實際應(yīng)用中,我們可以使用BufferedReader等類來處理輸入流。

3. URLConnection類

3.1 簡介

Java.net.URLConnection是負(fù)責(zé)與HTTP服務(wù)器建立連接的通用類,它給我們提供了一些方法可以向服務(wù)器發(fā)送請求并讀取服務(wù)器的響應(yīng)。比如,setRequestProperty()方法可以用于設(shè)置請求頭信息,setDoOutput()方法可以用于指示是否向服務(wù)器發(fā)送請求體等。另外URLConnection還是HttpURLConnection的父類,但與之不同的是,URLConnection還額外支持FTP、Gopher等協(xié)議。

從實現(xiàn)原理上來說,URLConnection類主要是通過創(chuàng)建一個連接對象,然后使用這個連接對象向服務(wù)器發(fā)送請求并讀取服務(wù)器的響應(yīng)。而在創(chuàng)建連接對象時, URLConnection會根據(jù)指定的URL自動選擇合適的網(wǎng)絡(luò)協(xié)議。在連接對象創(chuàng)建成功后,我們可以使用connect()方法連接到服務(wù)器。當(dāng)連接成功后,我們就可以使用getInputStream()方法來獲取服務(wù)器返回的輸入流,然后使用這個輸入流讀取服務(wù)器的響應(yīng)結(jié)果。

3.2 基本使用

接下來再給大家介紹一下URLConnection類的基本使用步驟。URLConnection的使用,整體可以分為發(fā)起請求和獲取響應(yīng)兩個步驟,所以接下來我也是按這種思路給大家進行介紹。

我們首先得創(chuàng)建一個URLConnection對象,代碼如下:

//大家可以選擇一個合適的url網(wǎng)址
URL url = new URL("<www.mobiletrain.org>");
//獲取連接對象
URLConnection conn = url.openConnection();

獲取了URLConnection對象之后,我們就可以向服務(wù)器發(fā)起請求了,代碼如下:

//指示是否向服務(wù)器發(fā)送請求體
conn.setDoOutput(true);
//通過輸出流,向服務(wù)器發(fā)送請求參數(shù)或請求體
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write("param1=value1&param2=value2");
writer.flush();
writer.close();

在向服務(wù)器發(fā)送了請求之后,如果我們想得到服務(wù)器返回來的響應(yīng)信息,可以使用如下方法:

//獲得服務(wù)器返回的響應(yīng)流
InputStream input = conn.getInputStream();

然后我們就可以對這個響應(yīng)流進行操作,得到具體的內(nèi)容,例如下面的代碼:

BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line = null;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}

當(dāng)然,服務(wù)器返回來的信息不一定就是文本信息,也有可能是音頻、視頻、文件等內(nèi)容,此時如果使用字符流就不合適了。我們也可以把InputStream轉(zhuǎn)換為字節(jié)流進行操作,通過字節(jié)得到合適的文件格式。

二. HTTP編程

其實HTTP編程與URL編程非常類似,兩者的使用基本一致,也是要通過java.net包中的API來實現(xiàn),比如URL類和HttpURLConnection、HttpClient等類。其中URL類我們已經(jīng)在前面講解過,接下來我們再了解一下HttpURLConnection類和HttpClient類的相關(guān)內(nèi)容吧。

1. HttpURLConnection類

1.1 簡介

HttpURLConnection繼承自URLConnection類,該類也是用于與HTTP服務(wù)器建立連接的類。它提供了一些方法,可以讓我們來發(fā)送HTTP請求并讀取服務(wù)器的響應(yīng)。

我們知道,URLConnection類是所有URL協(xié)議的通用父類,它提供了一些通用的方法來建立與服務(wù)器的連接,發(fā)送請求并讀取服務(wù)器的響應(yīng)。但如果我們想要更多的HTTP功能,就可以使用HttpURLConnection類,否則可以使用URLConnection類。

1.2 基本使用

接下來也把HttpURLConnection的使用步驟給大家展示一下。

如果我們要使用HttpURLConnection,首先得創(chuàng)建一個URL對象,然后調(diào)用該對象的openConnection()方法來強制轉(zhuǎn)換得到一個HttpURLConnection對象。代碼示例如下:

URL url = new URL("<www.mobiletrain.org>");
//強制類型轉(zhuǎn)換
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

在得到連接對象之后,我們就可以發(fā)送HTTP請求了。而在發(fā)送HTTP請求之前,我們需要設(shè)置使用的HTTP請求方法。HttpURLConnection類支持HTTP協(xié)議中的各種請求方法,例如GET、POST、PUT等,我們可以使用setRequestMethod()方法進行設(shè)置,代碼如下:

conn.setRequestMethod("GET");

接下來在發(fā)送HTTP請求時,可以設(shè)置一些更具體的HTTP請求頭,例如Content-Type、User-Agent等。而要設(shè)置HTTP請求頭,我們可以使用setRequestProperty()方法。比如我們想請求json格式的內(nèi)容,就可以設(shè)置如下代碼:

conn.setRequestProperty("Content-Type", "application/json");

然后我們就可以獲取服務(wù)器的響應(yīng)結(jié)果了,比如使用BufferedReader等IO流來處理輸入流。代碼如下所示:

BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line = null;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}

以上就是使用HttpURLConnection類發(fā)送HTTP請求并讀取服務(wù)器響應(yīng)的基本步驟。大家可以看到,HttpURLConnection的使用與URLConnection的用法幾乎一樣,只是在設(shè)置請求方法處有所差別。

1.3 其他設(shè)置

但是我們在實際應(yīng)用中,還要注意異常的處理、設(shè)置連接的超時時間、發(fā)送POST請求等問題。

我們在使用HttpURLConnection類發(fā)送HTTP請求時,可能會發(fā)生各種異常,例如網(wǎng)絡(luò)連接異常、服務(wù)器返回錯誤等。所以為了保證程序的健壯性,我們必須對異常進行適當(dāng)?shù)奶幚?。代碼如下所示:

try {
    URL url = new URL("<www.mobiletrain.org>");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    InputStream input = conn.getInputStream();
} catch (IOException e) {
    e.printStackTrace();
}

另外我們在使用HttpURLConnection類發(fā)送HTTP請求時,可能會因為網(wǎng)絡(luò)原因等導(dǎo)致連接超時。為了避免連接超時的情況,可以通過setConnectTimeout()方法來設(shè)置連接超時時間。以下代碼設(shè)置連接超時時間為5秒:

conn.setConnectTimeout(5000);

1.4 發(fā)送POST請求

在前面的案例中,給大家講解了如何發(fā)送GET請求。實際上,GET請求和POST請求是不太一樣的。POST請求比GET請求能夠攜帶更多的數(shù)據(jù),也更安全。

如果我們要發(fā)送POST請求,可以使用setRequestMethod()方法,并將請求方法設(shè)置為POST。然后使用setDoOutput()方法打開輸出流,并將數(shù)據(jù)寫入輸出流。代碼如下所示:

try {
    URL url = new URL("<www.mobiletrain.org>");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    //設(shè)置post請求
    conn.setRequestMethod("POST");
    conn.setDoOutput(true);
    OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
    //傳遞請求參數(shù)
    writer.write("username=john&password=123456");
    writer.flush();
    writer.close();
    //獲取響應(yīng)結(jié)果
    InputStream input = conn.getInputStream();
    ......
    ......
} catch (IOException e) {
    e.printStackTrace();
}

以上就是HttpURLConnection類的基本使用步驟了,大家會發(fā)現(xiàn),其實該類與URLConnection的用法基本大同小異,并沒有額外的難度。

1.5 綜合案例--下載文件

接下來就編寫一個案例,利用HttpURLConnection來下載一個網(wǎng)絡(luò)圖片到F盤中。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.http.client.ClientProtocolException;

/**
 * @author 一一哥Sun
 * @company 千鋒教育
 */
public class Demo03 {

	public static void main(String[] args) throws ClientProtocolException, IOException {
		//創(chuàng)建一個URL對象,關(guān)聯(lián)圖片地址
		URL url = new URL("http://www.mobiletrain.org/images/index/new_logo.png"); 
		//得到一個HttpURLConnection對象
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		//設(shè)置請求方法
		connection.setRequestMethod("GET");
		//得到響應(yīng)結(jié)果
		InputStream inputStream = connection.getInputStream();
		//創(chuàng)建文件
		File file=new File("F://logo.png");
		//利用IO流輸出內(nèi)容到文件中
		FileOutputStream outputStream = new FileOutputStream(file); 
		byte[] buffer = new byte[1024];
		int bytesRead;
		while ((bytesRead = inputStream.read(buffer)) != -1) {
		    outputStream.write(buffer, 0, bytesRead);
		}
		//關(guān)閉資源
		outputStream.close();
		inputStream.close();
		//關(guān)閉連接
		connection.disconnect();
	}
}

在這個案例中,大家記得要把文件的路徑盤符設(shè)置成自己的,不一定要和我的一樣。而且我們不僅可以下載一個圖片,也可以下載任意格式的文件,你可以根據(jù)小編的代碼試試哦。

2. HttpClient類

2.1 簡介

HttpClient是Apache軟件基金會中提供的用于發(fā)送HTTP請求的開源框架,它提供了比HttpURLConnection更加簡單、靈活、可靠的請求方式,使用起來更加的方便。我們經(jīng)常使用HttpClient構(gòu)建HTTP客戶端程序,比如在Android移動端中請求Web服務(wù)器的接口。

HttpClient作為一個優(yōu)秀的開源框架,具有如下特點:

  • 支持HTTP/1.1和HTTP/2協(xié)議;
  • 支持同步和異步請求;
  • 支持連接池和連接復(fù)用;
  • 支持自定義的連接超時時間和請求超時時間;
  • 支持自定義的請求頭和響應(yīng)頭;
  • 支持自定義的Cookie管理和認(rèn)證方式;
  • 支持代理服務(wù)器和SSL/TLS安全協(xié)議。

2.2 基本使用

HttpClient框架給我們提供了HttpGet和HttpPost類,分別表示GET和POST請求。通過這些類,我們可以設(shè)置請求頭、請求參數(shù)、請求體等信息,并可以獲取服務(wù)器的響應(yīng)結(jié)果。另外HttpClient還給我們提供了一些其他的功能,比如連接池、請求重試、狀態(tài)管理等。接下來就給大家說一下HttpClient的基本開發(fā)步驟。

因為HttpClient是Apache中的開源項目,所以Java源碼中并沒有自帶該類,如果我們想在Java項目中使用HttpClient,需要先導(dǎo)入HttpClient的依賴包。關(guān)于導(dǎo)入依賴包,以后我們可以使用Maven或Gradle進行導(dǎo)入,以后也會開辟專門的Maven專欄,歡迎大家持續(xù)關(guān)注哦。但現(xiàn)在我們還不具備這些知識,所以可以提前把HttpClient的jar包下載下來,然后手動導(dǎo)入到Java項目中。有了jar包之后,接下來就是基本的開發(fā)步驟了。

首先我們要創(chuàng)建一個HttpClient對象,代碼如下:

CloseableHttpClient client = HttpClients.createDefault();

然后再創(chuàng)建一個Http請求對象,如果想發(fā)起Get請求就創(chuàng)建HttpGet對象,想發(fā)起Post請求就創(chuàng)建HttpPost對象,代碼如下所示:

HttpGet request = new HttpGet(url);

然后利用創(chuàng)建好的請求對象來設(shè)置請求頭,代碼如下:

request.setHeader("Content-Type", "application/json");

接下來我們就可以利用HttpClient對象,發(fā)送請求并獲取響應(yīng)對象了,代碼如下所示:

CloseableHttpResponse response = client.execute(request);

接著我們就可以處理響應(yīng)數(shù)據(jù)了,代碼如下所示:

HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity);

最后要關(guān)閉響應(yīng)對象和HttpClient對象。

response.close();
client.close();

2.3 綜合案例--請求json

小編設(shè)計了一個通過Get請求獲取json接口的案例,但在編寫代碼之前,我們需要提前導(dǎo)入HttpClient的依賴包,如下圖所示:

導(dǎo)入了依賴包之后,我們就可以進行代碼實現(xiàn)了。

import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

/**
 * @author 一一哥Sun
 * @company 千鋒教育
 */
public class Demo02 {

	public static void main(String[] args) throws ClientProtocolException, IOException {
		//這是一個json接口地址
        String url = "https://json.tewx.cn/json/API_kdd531mytfdzm06i?sdAS1dsnuUa3sd=190001&Jsdh4bajs99dii=sohpuisypf4nfaei";
		//創(chuàng)建一個HttpClient對象
		CloseableHttpClient client = HttpClients.createDefault();
        //創(chuàng)建一個Get請求對象
        HttpGet request = new HttpGet(url);
        //設(shè)置請求頭
        request.setHeader("Content-Type", "application/json");
        //執(zhí)行請求,獲取響應(yīng)結(jié)果
        CloseableHttpResponse response = client.execute(request);
        //得到響應(yīng)體
        HttpEntity entity = response.getEntity();
        //將響應(yīng)結(jié)果轉(zhuǎn)為字符串
        String content = EntityUtils.toString(entity);
        System.out.println(content);
	}
}

以上幾行代碼,我們就可以把網(wǎng)上的JSON接口內(nèi)容請求下來,如下圖所示:

其實利用HttpURLConnection也可以實現(xiàn)這樣的效果,兩者的功能都是相似的,但兩者之間也有一些區(qū)別。

3. HttpURLConnection與HttpClient的區(qū)別

HttpURLConnection是Java標(biāo)準(zhǔn)庫中用于發(fā)送HTTP請求的類。它提供了一些方法用來建立與HTTP服務(wù)器的連接、設(shè)置HTTP請求方法、設(shè)置HTTP請求頭、發(fā)送請求、獲取服務(wù)器的響應(yīng)等。該類使用起來比較麻煩,但能夠滿足基本的HTTP請求需求。

HttpClient是一種用于發(fā)送HTTP請求的開源框架,它提供了更加簡單、靈活、可靠的HTTP請求方式,使用起來比Java標(biāo)準(zhǔn)庫中的HttpURLConnection更加方便。

所以如果我們只是想要進行較為簡單的HTTP請求,可以使用HttpURLConnection;如果需要實現(xiàn)更復(fù)雜的HTTP請求,則推薦使用HttpClient。

三. 結(jié)語

至此,就給大家講解了URL編程和HTTP編程,你學(xué)會了嗎?其實無論我們是進行URL編程,還是進行HTTP編程,這兩者的實現(xiàn)過程其實很相似,但在進行實現(xiàn)的時候,我們需要注意以下事項:

  • 在URL編程中,我們必須確保URL是一個正確的地址,否則可能會導(dǎo)致URL編程失?。?/li>
  • 在HttpURLConnection編程中,必須確保正確地設(shè)置HTTP請求頭,否則也可能會導(dǎo)致服務(wù)器無法正確地處理請求;
  • 在URLConnection編程中,必須要正確地處理HTTP響應(yīng)頭,否則可能會導(dǎo)致無法正確地讀取響應(yīng)結(jié)果;
  • 另外在實際應(yīng)用中,我們還要處理各種異常和錯誤,以確保程序的正確性和穩(wěn)定性。

總之,URL編程和HTTP編程都是Java中用于訪問互聯(lián)網(wǎng)資源的標(biāo)準(zhǔn)化方式,Java給我們提供了URL類、HttpURLConnection類和URLConnection類來實現(xiàn)。我們只要在實際應(yīng)用中,注意URL字符串的處理、HTTP請求頭的設(shè)置、HTTP響應(yīng)頭的處理以及異常和錯誤的處理,進行這些開發(fā)并不難。

以上就是Java網(wǎng)絡(luò)通信中URL與HTTP編程技術(shù)詳解的詳細(xì)內(nèi)容,更多關(guān)于Java URL與HTTP編程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mybatis配置之properties和settings標(biāo)簽的用法

    Mybatis配置之properties和settings標(biāo)簽的用法

    這篇文章主要介紹了Mybatis配置之properties和settings標(biāo)簽的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot中的@ConditionalOnMissingBean注解使用詳解

    SpringBoot中的@ConditionalOnMissingBean注解使用詳解

    這篇文章主要介紹了SpringBoot中的@ConditionalOnMissingBean注解使用詳解,@ConditionalOnMissingBean作用在@Bean定義上,也就是說在容器加載它作用的Bean時,檢查容器中是否存在目標(biāo)類型,需要的朋友可以參考下
    2024-01-01
  • Java?Web中ServletContext對象詳解與應(yīng)用

    Java?Web中ServletContext對象詳解與應(yīng)用

    ServletContext是一個容器,可以用來存放變量,供一個web項目中多個Servlet共享,下面這篇文章主要給大家介紹了關(guān)于Java?Web中ServletContext對象詳解與應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • @Validated驗證List集合的方法示例

    @Validated驗證List集合的方法示例

    這篇文章主要介紹了@Validated驗證List集合的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • maven如何在tomcat8中實現(xiàn)自動部署

    maven如何在tomcat8中實現(xiàn)自動部署

    本篇文章主要介紹了maven如何在tomcat8中實現(xiàn)自動部署,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • MyBatis一次執(zhí)行多條SQL語句的操作

    MyBatis一次執(zhí)行多條SQL語句的操作

    這篇文章主要介紹了MyBatis一次執(zhí)行多條SQL語句的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java獲取用戶訪問IP及地理位置的方法詳解

    Java獲取用戶訪問IP及地理位置的方法詳解

    這篇文章主要介紹了Java獲取用戶訪問IP及地理位置的方法,結(jié)合實例形式詳細(xì)分析了Java基于百度地圖開放平臺獲取用戶訪問IP及地理位置相關(guān)操作技巧,需要的朋友可以參考下
    2020-04-04
  • JAVA 實現(xiàn)二叉樹(鏈?zhǔn)酱鎯Y(jié)構(gòu))

    JAVA 實現(xiàn)二叉樹(鏈?zhǔn)酱鎯Y(jié)構(gòu))

    本篇文章主要介紹用JAVA 實現(xiàn)二叉樹,并提供實例.對二叉樹數(shù)據(jù)結(jié)構(gòu)很好的學(xué)習(xí)實踐,有需要的朋友可以參考下
    2016-07-07
  • SpringMvc配置靜態(tài)資源訪問路徑的實現(xiàn)

    SpringMvc配置靜態(tài)資源訪問路徑的實現(xiàn)

    本文主要介紹了SpringMvc配置靜態(tài)資源訪問路徑的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java并發(fā)編程之volatile變量介紹

    Java并發(fā)編程之volatile變量介紹

    這篇文章主要介紹了Java并發(fā)編程之volatile變量介紹,volatile提供了弱同步機制,用來確保將變量更新通知到其它線程,需要的朋友可以參考下
    2015-04-04

最新評論