国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

用Java設(shè)計(jì)下載軟件

2019-11-18 15:39:55
字體:
供稿:網(wǎng)友

  HTTP 協(xié)議的簡介

  HTTP協(xié)議是一種超文本傳輸協(xié)議(Hypertext Transfer PRotocol),工作于網(wǎng)絡(luò)應(yīng)用層,自1990年起廣泛應(yīng)用于WWW 的全球信息服務(wù),HTTP協(xié)議的具體說明可以在網(wǎng)上查閱RFC2518、RFC2616等文檔。

  HTTP 協(xié)議老的標(biāo)準(zhǔn)是HTTP/1.0,目前最通用的標(biāo)準(zhǔn)是HTTP/1.1。HTTP/1.1是在HTTP/1.0基礎(chǔ)上的升級,增加了一些功能,全面兼容HTTP/1.0。HTTP/1.0不支持文件斷點(diǎn)續(xù)傳,假如服務(wù)器使用HTTP/1.0,“網(wǎng)絡(luò)螞蟻”的任何多線程下載程序都只能按單線程下載;好在目前的Web服務(wù)器絕大多數(shù)都采用了HTTP/1.1,所以,下面將基于HTTP/1.1進(jìn)行介紹。

  HTTP協(xié)議的相關(guān)重要命令

  基于HTTP的瀏覽器瀏覽網(wǎng)頁、下載文件時(shí),工作原理類似客戶機(jī)/服務(wù)器模式:瀏覽器向Web服務(wù)器發(fā)出一個(gè)HTTP請求行;Web服務(wù)器在收到有效的請求后,返回一個(gè)狀態(tài)行或多個(gè)響應(yīng)標(biāo)題、一個(gè)空白行和相關(guān)文檔。根據(jù)這一工作原理,下載程序必須實(shí)現(xiàn)向服務(wù)器發(fā)送請求和獲取服務(wù)器響應(yīng)狀態(tài)的功能。

  1.向服務(wù)器發(fā)送 GET請求命令

  一個(gè)HTTP請求由一個(gè)請求行、可選數(shù)目的請求標(biāo)題、一個(gè)空白行,以及在POST情況下的一些額外的數(shù)據(jù)組成。請求行的格式是:

  請求方法 URI  HTTP/版本號

  GET 命令是瀏覽器常用的文檔請求方法,在程序中間使用

  GET URI  HTTP/1.1

  向Web服務(wù)器發(fā)送請求行(行號3),java 代碼如下:


....
clientSocket = new Socket(host, port);//打開要下載文件服務(wù)器的Socket
outStream = new PrintStream(clientSocket.getOutputStream());
....
outStream.println(“GET”+uri+“ HTTP/1.1”);
outStream.println(“Host:”+host);
outStream.println(“Accept:*/* ”);
outStream.println(“Referer:”);
outStream.println();
....

  注:第4行給出URL中的主機(jī)名和端口號,第5行說明客戶端接收所有MIME類型,第7行方送一個(gè)空白行,表明請求行結(jié)束。

  2.獲取服務(wù)器響應(yīng)狀態(tài)

  在發(fā)送HTTP請求行以后,程序就可以讀取服務(wù)器的響應(yīng)狀態(tài)了。HTTP響應(yīng)狀態(tài)行包括:HTTP 狀態(tài)碼和一些HTTP響應(yīng)標(biāo)題。

  1) HTTP狀態(tài)碼

  HTTP狀態(tài)碼格式是 HTTP/版本信息的數(shù)字表示。狀態(tài)碼例子如下:

  HTTP/1.0 200 OK // 表示服務(wù)器支持HTTP/1.0 協(xié)議,成功

  HTTP/1.1 200 OK // 表示服務(wù)器支持HTTP/1.1 協(xié)議,成功

  HTTP/1.0 404 Not Found // 表示服務(wù)器支持HTTP/1.0 協(xié)議,訪問文件沒有找到

  在程序中間,假如讀到“HTTP/1.1 200 OK”這樣的字符串,表明欲下載文件存在、該服務(wù)器支持?jǐn)帱c(diǎn)續(xù)傳,可以使用多線程下載。假如讀到“HTTP/1.0 200 OK”這樣的字符串,表明欲下載文件存在、但該服務(wù)器不支持?jǐn)帱c(diǎn)續(xù)傳,只可以使用單線程下載。


.....
while ((line=inStream.readLine()) != null) //將服務(wù)器響應(yīng)狀態(tài)讀到line
........
if(line.substring(0,7).equals(“HTTP/1.”) ) //判定是否支持HTTP/1.1
{ if(line.charAt(7)==‘0’)
{
System.out.println(“server use http/1.0”);
threadcount=1;
}
if(!(line.substring(9,12)).equals(“200”)) //判定請求是否成功
{ System.out.println(“ERROR:”+line);
return false;
}
}

  2) 讀取重要的響應(yīng)標(biāo)題,獲得要下載文檔的文件長度

  假如HTTP狀態(tài)碼表明訪問成功,服務(wù)器會回送一些標(biāo)題行,我們最關(guān)注的是Content-Length 這一行,比如,假如服務(wù)器回送“Content-Length:1000”,表明請求文件的長度是1000字節(jié),所以讀取這一行信息,可以得到文件的長度信息:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 温宿县| 阿坝县| 安岳县| 泸西县| 新源县| 伊通| 定陶县| 广德县| 杂多县| 贺兰县| 二连浩特市| 潼关县| 平邑县| 道真| 广宗县| 唐山市| 洪泽县| 高淳县| 阜新市| 乐平市| 平阴县| 衢州市| 华亭县| 哈巴河县| 广平县| 开封县| 思南县| 肥城市| 略阳县| 台北县| 正定县| 达拉特旗| 中山市| 西吉县| 乌鲁木齐县| 松溪县| 句容市| 苏尼特右旗| 兰州市| 定南县| 巧家县|