国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java實(shí)現(xiàn)基于http協(xié)議的網(wǎng)絡(luò)文件下載

瀏覽:26日期:2024-03-03 16:18:48

1.HTTP協(xié)議工作方式

基于HTTP協(xié)議的客戶/服務(wù)器模式的信息交換過程,它分四個(gè)過程:建立連接、發(fā)送請(qǐng)求信息、獲取服務(wù)器響應(yīng)狀態(tài)、關(guān)閉連接。其中較為復(fù)雜的過程是:發(fā)送請(qǐng)求信息、獲取服務(wù)器響應(yīng)狀態(tài).

1)向服務(wù)器發(fā)送請(qǐng)求信息

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

Method Request-URI HTTP-Vsersion CRLF

Method表示請(qǐng)求方法,如GET和POST

Request-URI標(biāo)識(shí)了要請(qǐng)求的資源,

HTTP-Version表示請(qǐng)求的HTTP協(xié)議版本,

CRLF表示回車換行。

HTTP請(qǐng)求報(bào)文格式如下:

HTTP Command:;;;;//方法字段(GET方法,POST方法)

URI:;;;;;//URL字段,發(fā)送請(qǐng)求至保存該網(wǎng)站的服務(wù)器。

HTTP Version:;;;;//http協(xié)議版本字段

Accept:;;//指示可被接受的請(qǐng)求回應(yīng)的介質(zhì)類型范圍列表。

Accept-Language:;//限制了請(qǐng)求回應(yīng)中首選的語(yǔ)言為簡(jiǎn)體中文,否則使用默認(rèn)值。

Accept-Encoding:;//限制了回應(yīng)中可接受的內(nèi)容編碼值

User-Agent: //定義用戶代理,即發(fā)送請(qǐng)求的瀏覽器類型

Host:;;;;//定義了目標(biāo)所在的主機(jī)

Connection: //告訴服務(wù)器使用連接類型

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

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

HTTP回應(yīng)報(bào)文

HTTP Version: HTTP/1.1;;;;//服務(wù)器用的是HTTP/1.1版本

HTTP Status: 200;;//請(qǐng)求成功,信息可以讀取,包含在響應(yīng)的報(bào)文中

Date:;;;;;//響應(yīng)報(bào)文的時(shí)間

Server:;;;//響應(yīng)報(bào)文的服務(wù)器

X-Powered-By:;;;;;//表明運(yùn)行環(huán)境

Set- cookie: //

Vary:;;;;;//

Content-Length:;;//表明實(shí)體的長(zhǎng)度

Connection: //告訴客戶機(jī)在報(bào)文發(fā)送完畢后連接的狀態(tài)

Content-Type:;;;//表明實(shí)體中的對(duì)象類型(html文檔)

Binary Data:;;;//二進(jìn)制數(shù)據(jù)

狀態(tài)碼表示響應(yīng)類型,常用的有:

1××保留

2××表示請(qǐng)求成功地接收

3××為完成請(qǐng)求客戶需進(jìn)一步細(xì)化請(qǐng)求

4××客戶錯(cuò)誤

5××服務(wù)器錯(cuò)誤

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

2.實(shí)現(xiàn)代碼

Java代碼

import java.io.IOException;

import java.io.InputStream;

import java.io.RandomAccessFile;

import java.net.HttpURLConnection;

import java.net.URL;

public class TestDownFile {

public static void main(String[] args){

String sURL ="http://localhost:8080/hrproject/book.rar";

int nStartPos=0;

int nRead=0;

String sName="book.rar";

String sPath="e:temp";

try {

URL url = new URL(sURL);

//打開連接

HttpURLConnection httpConnection = (HttpURLConnection) url

.openConnection();

//獲得文件長(zhǎng)度

long nEndPos =getFileSize(sURL);

RandomAccessFile oSavedFile= new RandomAccessFile(sPath+""+sName, "rw");

httpConnection.setRequestProperty("User-Agent", "Internet Explorer");

String sProperty = "bytes=" + nStartPos + "-";

//告訴服務(wù)器book.rar這個(gè)文件從nStartPos字節(jié)開始傳

httpConnection.setRequestProperty("RANGE", sProperty);

System.out.println(sProperty);

InputStream input = httpConnection.getInputStream();

byte[] b = new byte[1024];

//讀取網(wǎng)絡(luò)文件,寫入指定的文件中

while ((nRead = input.read(b, 0, 1024)) > 0

&& nStartPos < nEndPos ) {

oSavedFile.write(b, 0, nRead);

nStartPos += nRead;

}

httpConnection.disconnect();

} catch (Exception e) {

e.printStackTrace();

}

}

//; 獲得文件長(zhǎng)度

public static long getFileSize(String sURL) {

int nFileLength = -1;

try {

URL url = new URL(sURL);

HttpURLConnection httpConnection = (HttpURLConnection) url

.openConnection();

httpConnection.setRequestProperty("User-Agent", "Internet Explorer");

int responseCode = httpConnection.getResponseCode();

if (responseCode >= 400) {

System.err.println("Error Code : " + responseCode);

return -2; // -2 represent access is error

}

String sHeader;

for (int i = 1i++) {

sHeader = httpConnection.getHeaderFieldKey(i);

if (sHeader != null) {

if (sHeader.equals("Content-Length")) {

nFileLength = Integer.parseInt(httpConnection

.getHeaderField(sHeader));

break;

}

} else

break;

}

} catch (IOException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

System.out.println(nFileLength);

return nFileLength;

}

}

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 日韩精品一区二区三区免费观看 | 粉嫩jk制服美女啪啪 | 日本免费一二区视频 | 欧美一级片毛片 | 一本色道久久综合亚洲精品 | 成人看片黄a免费看视频 | 日本一区二区高清不卡 | 美女插跳蛋视频叫爽 | 久草视频2 | 国产精品aⅴ| 永久精品免费影院在线观看网站 | 国产精品久久一区 | 99久久免费观看 | 日韩在线三级视频 | 亚洲国产精品一区二区首页 | 欧美一级亚洲一级 | 精品久久久久久综合日本 | 国产vs久久 | a级做爰片毛片视频 | 国产午夜久久影院 | 香蕉超级碰碰碰97视频蜜芽 | 久久99久久成人免费播放 | 国产成人亚洲欧美三区综合 | 免费毛片视频网站 | 成人观看的视频三级 | 国产a国产 | a级午夜毛片免费一区二区 a级性生活视频 | 日韩欧美第一页 | 欧美性精品hd在线观看 | 欧美精品首页 | 请看一下欧美一级毛片 | 国产真人毛片一级视频 | 美女在线网站免费的 | 韩国一级片视频 | 国产一级小视频 | 国产成人精视频在线观看免费 | 亚洲综合久久久久久中文字幕 | 亚洲高清二区 | 亚洲国产精品综合久久 | 99在线精品免费视频九九视 | 精品视频在线看 |