欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
HTTP請求模型、頭信息參考、AAuto開(kāi)發(fā)實(shí)例
作者: 神碼    時(shí)間: 2012-4-1 20:27
標題: HTTP請求模型、頭信息參考、AAuto開(kāi)發(fā)實(shí)例
一、連接至Web服務(wù)器

一個(gè)客戶(hù)端應用(如Web瀏覽器)打開(kāi)到Web服務(wù)器的HTTP端口的一個(gè)套接字(缺省為80)。
例如:http://www.aau.cn:80/index.html
在A(yíng)Auto中,這將等同于代碼:

import wsock.tcp.client;
var tcp = wsock.tcp.client()
tcp.connect(
"www.aau.cn",80)
二、發(fā)送HTTP請求

通過(guò)連接,客戶(hù)端寫(xiě)一個(gè)ASCII文本請求行,
后跟0或多個(gè)HTTP頭標,一個(gè)空行和實(shí)現請求的任意數據。
一個(gè)請求由四個(gè)部分組成:請求行、請求頭標、空行和請求數據

1.請求行:請求行由三個(gè)標記組成:請求方法、請求URI和HTTP版本,它們用空格分隔。
例如:GET /index.html HTTP/1.1

HTTP規范定義了8種可能的請求方法:
GET            檢索URI中標識資源的一個(gè)簡(jiǎn)單請求
HEAD            與GET方法相同,服務(wù)器只返回狀態(tài)行和頭標,并不返回請求文檔
POST            服務(wù)器接受被寫(xiě)入客戶(hù)端輸出流中的數據的請求
PUT            服務(wù)器保存請求數據作為指定URI新內容的請求
DELETE            服務(wù)器刪除URI中命名的資源的請求
OPTIONS        關(guān)于服務(wù)器支持的請求方法信息的請求
TRACE            Web服務(wù)器反饋Http請求和其頭標的請求
CONNECT        已文檔化但當前未實(shí)現的一個(gè)方法,預留做隧道處理

2.請求頭標:由關(guān)鍵字/值對組成,每行一對,關(guān)鍵字和值用冒號(:)分隔。
請求頭標通知服務(wù)器有關(guān)于客戶(hù)端的功能和標識,典型的請求頭標有:
User-Agent        客戶(hù)端廠(chǎng)家和版本
Accept            客戶(hù)端可識別的內容類(lèi)型列表
Content-Length    附加到請求的數據字節數
3.空行:最后一個(gè)請求頭標之后是一個(gè)空行,發(fā)送回車(chē)符和退行,通知服務(wù)器以下不再有頭標。
4.請求數據:使用POST傳送數據,最常使用的是Content-Type和Content-Length頭標。

下面使用 AAuto模擬上面的過(guò)程:

import wsock.tcp.client;
var tcp = wsock.tcp.client()
tcp.connect(
"www.aau.cn",80)

sendData =
/***********
GET /  HTTP/1.1
Host: www.aau.cn
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
Cache-Control: max-age=0
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain,image/png,*/*;  
Accept-Language: zh-CN,zh;
Accept-Charset: GBK,utf-8;  
***********/

tcp.write( sendData +
'\r\n\r\n' )

三、服務(wù)端接受請求并返回HTTP響應

Web服務(wù)器解析請求,定位指定資源。服務(wù)器將資源副本寫(xiě)至套接字,在此處由客戶(hù)端讀取。
一個(gè)響應由四個(gè)部分組成;狀態(tài)行、響應頭標、空行、響應數據

1.狀態(tài)行:狀態(tài)行由三個(gè)標記組成:HTTP版本、響應代碼和響應描述。
HTTP版本:向客戶(hù)端指明其可理解的最高版本。
響應代碼:3位的數字代碼,指出請求的成功或失敗,如果失敗則指出原因。
響應描述:為響應代碼的可讀性解釋。
例如:HTTP/1.1 200 OK
HTTP響應碼:
1xx:信息,請求收到,繼續處理
2xx:成功,行為被成功地接受、理解和采納
3xx:重定向,為了完成請求,必須進(jìn)一步執行的動(dòng)作
4xx:客戶(hù)端錯誤:
2.響應頭標:像請求頭標一樣,它們指出服務(wù)器的功能,標識出響應數據的細節。
3.空行:最后一個(gè)響應頭標之后是一個(gè)空行,發(fā)送回車(chē)符和退行,表明服務(wù)器以下不再有頭標。
4.響應數據:HTML文檔和圖像等,也就是HTML本身。

下面使用AAuto模擬實(shí)現一個(gè)完整的HTTP請求響應過(guò)程:

import wsock.tcp.client;
var tcp = wsock.tcp.client()
tcp.connect(
"www.aau.cn",80)

sendData =
/***********
GET /  HTTP/1.1
Host: www.aau.cn
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
Cache-Control: max-age=0
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain,image/png,*/*;  
Accept-Language: zh-CN,zh;
Accept-Charset: GBK,utf-8;  
***********/

tcp.write( sendData +
'\r\n\r\n' )

io.open()
for(str,size in tcp.eachRead() ){
    io.print( str );
}

tcp.close()


四、服務(wù)器關(guān)閉連接,瀏覽器解析響應

1.瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)代碼。
2.然后解析每一個(gè)響應頭標,頭標告知以下為若干字節的HTML。
3.讀取響應數據HTML,根據HTML的語(yǔ)法和語(yǔ)義對其進(jìn)行格式化,并在瀏覽器窗口中顯示它。
4.一個(gè)HTML文檔可能包含其它需要被載入的資源引用,瀏覽器識別這些引用,對其它的資源再進(jìn)行額外的請求,此過(guò)程循環(huán)多次。
五、無(wú)狀態(tài)連接

HTTP模型是無(wú)狀態(tài)的,表明在處理一個(gè)請求時(shí),Web服務(wù)器并不記住來(lái)自同一客戶(hù)端的請求。

六、實(shí)例

1.瀏覽器發(fā)出請求
GET /index.html HTTP/1.1

服務(wù)器返回響應
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Content-Length: 119
Content-Type: text/html
<HTML>
<HEAD>
<LINK REL=”stylesheet” HREF=”index.css”>
</HEAD>
<BODY>
<IMG SRC=”image/logo.png”>
</BODY>
</HTML>

2.瀏覽器發(fā)出請求

GET /index.css HTTP/1.1
服務(wù)器返回響應
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Connection: Keep-alive, close
Content-Length: 70
Content-Type: text/plane
h3{
font-size:20px;
font-weight:bold;
color:#005A9C;
}

3.瀏覽器發(fā)出請求
GET image/logo.png HTTP/1.1
服務(wù)器返回響應
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Connection: Keep-alive, close
Content-Length: 1280
Content-Type: text/plane
{Binary image data follows}

(附錄)

1.HTTP規范:Internet工程制定組織(IETF)發(fā)布的RFC指定Internet標準,這些RFC被Internet研究發(fā)展機構廣泛接受。因為它們是標準文檔,故一般用正規語(yǔ)言編寫(xiě),如立法文標一樣。
2.RFC:RFC一旦被提出,就被編號且不會(huì )再改變,當一個(gè)標準被修改時(shí),則給出一個(gè)新的RFC。作為標準,RFC在Internet上被廣泛采用。
3.HTTP的幾個(gè)重要RFC:
RFC1945    HTTP 1.0 描述
RFC2068    HTTP 1.1 初步描述
RFC2616    HTTP 1.1 標準
4.資源標識符URI(Uniform Resource Identifter,URI)


HTTP參考

一、HTTP碼應碼

響應碼由三位十進(jìn)制數字組成,它們出現在由HTTP服務(wù)器發(fā)送的響應的第一行。
響應碼分五種類(lèi)型,由它們的第一位數字表示:
1.1xx:信息,請求收到,繼續處理
2.2xx:成功,行為被成功地接受、理解和采納
3.3xx:重定向,為了完成請求,必須進(jìn)一步執行的動(dòng)作
4.4xx:客戶(hù)端錯誤,請求包含語(yǔ)法錯誤或者請求無(wú)法實(shí)現
5.5xx:服務(wù)器錯誤,服務(wù)器不能實(shí)現一種明顯無(wú)效的請求
下表顯示每個(gè)響應碼及其含義:
100            繼續
101            分組交換協(xié)
200            OK
201            被創(chuàng )建
202            被采納
203            非授權信息
204            無(wú)內容
205            重置內容
206            部分內容
300            多選項
301            永久地傳送
302            找到
303            參見(jiàn)其他
304            未改動(dòng)
305            使用代理
307            暫時(shí)重定向
400            錯誤請求
401            未授權
402            要求付費
403            禁止
404            未找到
405            不允許的方法
406            不被采納
407            要求代理授權
408            請求超時(shí)
409            沖突
410            過(guò)期的
411            要求的長(cháng)度
412            前提不成立
413            請求實(shí)例太大
414            請求URI太大
415            不支持的媒體類(lèi)型
416            無(wú)法滿(mǎn)足的請求范圍
417            失敗的預期
500            內部服務(wù)器錯誤
501            未被使用
502            網(wǎng)關(guān)錯誤
503            不可用的服務(wù)
504            網(wǎng)關(guān)超時(shí)
505            HTTP版本未被支持

二、HTTP頭標

頭標由主鍵/值對組成。它們描述客戶(hù)端或者服務(wù)器的屬性、被傳輸的資源以及應該實(shí)現連接。
四種不同類(lèi)型的頭標:
1.通用頭標:即可用于請求,也可用于響應,是作為一個(gè)整體而不是特定資源與事務(wù)相關(guān)聯(lián)。
2.請求頭標:允許客戶(hù)端傳遞關(guān)于自身的信息和希望的響應形式。
3.響應頭標:服務(wù)器和于傳遞自身信息的響應。
4.實(shí)體頭標:定義被傳送資源的信息。即可用于請求,也可用于響應。
頭標格式:<name>:<value><CRLF>
下表描述在HTTP/1.1中用到的頭標
Accept 定義客戶(hù)端可以處理的媒體類(lèi)型,按優(yōu)先級排序;
在一個(gè)以逗號為分隔的列表中,可以定義多種類(lèi)型和使用通配符。例如:Accept: image/jpeg,image/png,*/*
Accept-Charset        定義客戶(hù)端可以處理的字符集,按優(yōu)先級排序;
在一個(gè)以逗號為分隔的列表中,可以定義多種類(lèi)型和使用通配符。例如:Accept-Charset: iso-8859-1,*,utf-8

Accept-Encoding        定義客戶(hù)端可以理解的編碼機制。例如:Accept-Encoding:gzip,compress
請用此頭標可以向服務(wù)器請求壓縮后的數據(需要服務(wù)器支持),下面是使用AAuto模擬的一個(gè)實(shí)例:
//gzip解壓縮
import zlib;
import inet.whttp;

io.open();
var http = inet.whttp();
var str = http.get("http://www.sohu.com","Accept-Encoding:gzip, deflate")

str = zlib.gzUncompress(str)
io.print( str)

Accept-Language    定義客戶(hù)端樂(lè )于接受的自然語(yǔ)言列表。例如:Accept-Language: en,de
Accept-Ranges        一個(gè)響應頭標,它允許服務(wù)器指明:將在給定的偏移和長(cháng)度處,為資源組成部分的接受請求。
該頭標的值被理解為請求范圍的度量單位。例如Accept-Ranges: bytes或Accept-Ranges: none
Age 允許服務(wù)器規定自服務(wù)器生成該響應以來(lái)所經(jīng)過(guò)的時(shí)間長(cháng)度,以秒為單位。
該頭標主要用于緩存響應。例如:Age: 30
Allow 一個(gè)響應頭標,它定義一個(gè)由位于請求URI中的次源所支持的HTTP方法列表。例如:Allow: GET,PUT
aUTHORIZATION 一個(gè)響應頭標,用于定義訪(fǎng)問(wèn)一種資源所必需的授權(域和被編碼的用戶(hù)ID與口令)。
例如:Authorization: Basic YXV0aG9yOnBoaWw=
Cache-Control 一個(gè)用于定義緩存指令的通用頭標。例如:Cache-Control: max-age=30
Connection 一個(gè)用于表明是否保存socket連接為開(kāi)放的通用頭標。例如:Connection: close或Connection: keep-alive
Content-Base 一種定義基本URI的實(shí)體頭標,為了在實(shí)體范圍內解析相對URLs。
如果沒(méi)有定義Content-Base頭標解析相對URLs,使用Content-Location URI(存在且絕對)或使用URI請求。
例如:Content-Base: Http://www.myweb.com
Content-Encoding 一種介質(zhì)類(lèi)型修飾符,標明一個(gè)實(shí)體是如何編碼的。例如:Content-Encoding: zip
Content-Language 用于指定在輸入流中數據的自然語(yǔ)言類(lèi)型。例如:Content-Language: en
Content-Length        指定包含于請求或響應中數據的字節長(cháng)度。例如:Content-Length:382
Content-Location        指定包含于請求或響應中的資源定位(URI)。
如果是一絕。對URL它也作為被解析實(shí)體的相對URL的出發(fā)點(diǎn)。
例如:Content-Location: http://www.myweb.com/news
Content-MD5        實(shí)體的一種MD5摘要,用作校驗和。
發(fā)送方和接受方都計算MD5摘要,接受方將其計算的值與此頭標中傳遞的值進(jìn)行比較。
例如:Content-MD5: <base64 of 128 MD5 digest>
Content-Range        隨部分實(shí)體一同發(fā)送;標明被插入字節的低位與高位字節偏移,也標明此實(shí)體的總長(cháng)度。
例如:Content-Range: 1001-2000/5000
Contern-Type        標明發(fā)送或者接收的實(shí)體的MIME類(lèi)型。例如:Content-Type: text/html
Date            發(fā)送HTTP消息的日期。例如:Date: Mon,10PR 18:42:51 GMT
ETag            一種實(shí)體頭標,它向被發(fā)送的資源分派一個(gè)唯一的標識符。
對于可以使用多種URL請求的資源,ETag可以用于確定實(shí)際被發(fā)送的資源是否為同一資源。
例如:ETag: ”208f-419e-30f8dc99″
Expires            指定實(shí)體的有效期。例如:Expires: Mon,05 Dec 2008 12:00:00 GMT
Form            一種請求頭標,給定控制用戶(hù)代理的人工用戶(hù)的電子郵件地址。例如:From: webmaster@myweb.com
Host            被請求資源的主機名。對于使用HTTP/1.1的請求而言,此域是強制性的。例如:Host: www.myweb.com
If-Modified-Since        如果包含了GET請求,導致該請求條件性地依賴(lài)于資源上次修改日期。
如果出現了此頭標,并且自指定日期以來(lái),此資源已被修改,應該反回一個(gè)304響應代碼。
例如:If-Modified-Since: Mon,10PR 18:42:51 GMT
If-Match            如果包含于一個(gè)請求,指定一個(gè)或者多個(gè)實(shí)體標記。只發(fā)送其ETag與列表中標記區配的資源。
例如:If-Match: ”208f-419e-308dc99″
If-None-Match        如果包含一個(gè)請求,指定一個(gè)或者多個(gè)實(shí)體標記。資源的ETag不與列表中的任何一個(gè)條件匹配,操作才執行。
例如:If-None-Match: ”208f-419e-308dc99″
If-Range            指定資源的一個(gè)實(shí)體標記,客戶(hù)端已經(jīng)擁有此資源的一個(gè)拷貝。必須與Range頭標一同使用。
如果此實(shí)體自上次被客戶(hù)端檢索以來(lái),還不曾修改過(guò),那么服務(wù)器只發(fā)送指定的范圍,否則它將發(fā)送整個(gè)資源。
例如:Range: byte=0-499<CRLF>If-Range:”208f-419e-30f8dc99″
If-Unmodified-Since    只有自指定的日期以來(lái),被請求的實(shí)體還不曾被修改過(guò),才會(huì )返回此實(shí)體。
例如:If-Unmodified-Since:Mon,10PR 18:42:51 GMT
Last-Modified        指定被請求資源上次被修改的日期和時(shí)間。例如:Last-Modified: Mon,10PR 18:42:51 GMT
Location            對于一個(gè)已經(jīng)移動(dòng)的資源,用于重定向請求者至另一個(gè)位置。
與狀態(tài)編碼302(暫時(shí)移動(dòng))或者301(永久性移動(dòng))配合使用。
例如:Location: http://www2.myweb.com/index.jsp
Max-Forwards        一個(gè)用于TRACE方法的請求頭標,以指定代理或網(wǎng)關(guān)的最大數目,該請求通過(guò)網(wǎng)關(guān)才得以路由。
在通過(guò)請求傳遞之前,代理或網(wǎng)關(guān)應該減少此數目。例如:Max-Forwards: 3
Pragma            一個(gè)通用頭標,它發(fā)送實(shí)現相關(guān)的信息。例如:Pragma: no-cache
Proxy-Authenticate    類(lèi)似于WWW-Authenticate,便是有意請求只來(lái)自請求鏈(代理)的下一個(gè)服務(wù)器的認證。
例如:Proxy-Authenticate: Basic realm-admin
Proxy-Proxy-Authorization    類(lèi)似于授權,但并非有意傳遞任何比在即時(shí)服務(wù)器鏈中更進(jìn)一步的內容。
例如:Proxy-Proxy-Authorization: Basic YXV0aG9yOnBoaWw=
Public            列表顯示服務(wù)器所支持的方法集。例如:Public: OPTIONS,MGET,MHEAD,GET,HEAD
Range            指定一種度量單位和一個(gè)部分被請求資源的偏移范圍。例如:Range: bytes=206-5513
Refener            一種請求頭標域,標明產(chǎn)生請求的初始資源。對于HTML表單,它包含此表單的Web頁(yè)面的地址。
例如:Refener: http://www.myweb.com/news/search.html
Retry-After        一種響應頭標域,由服務(wù)器與狀態(tài)編碼503(無(wú)法提供服務(wù))配合發(fā)送,以標明再次請求之前應該等待多長(cháng)時(shí)間。
此時(shí)間即可以是一種日期,也可以是一種秒單位。例如:Retry-After: 18
Server            一種標明Web服務(wù)器軟件及其版本號的頭標。例如:Server: Apache/2.0.46(Win32)
Transfer-Encoding    一種通用頭標,標明對應被接受方反向的消息體實(shí)施變換的類(lèi)型。例如:Transfer-Encoding: chunked
Upgrade        允許服務(wù)器指定一種新的協(xié)議或者新的協(xié)議版本,與響應編碼101(切換協(xié)議)配合使用。
例如:Upgrade: HTTP/2.0
User-Agent        定義用于產(chǎn)生請求的軟件類(lèi)型(典型的如Web瀏覽器)。
例如:User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)
Vary            一個(gè)響應頭標,用于表示使用服務(wù)器驅動(dòng)的協(xié)商從可用的響應表示中選擇響應實(shí)體。例如:Vary: *
Via            一個(gè)包含所有中間主機和協(xié)議的通用頭標,用于滿(mǎn)足請求。例如:Via: 1.0 fred.com, 1.1 wilma.com
Warning            用于提供關(guān)于響應狀態(tài)補充信息的響應頭標。例如:Warning: 99 www.myweb.com Piano needs tuning
www-Authenticate    一個(gè)提示用戶(hù)代理提供用戶(hù)名和口令的響應頭標,與狀態(tài)編碼401(未授權)配合使用。響應一個(gè)授權頭標。
例如:www-Authenticate: Basic realm=zxm.mgmt

AAuto HTTP開(kāi)發(fā)實(shí)例:

//創(chuàng )建whttp對象
var url = "http://www.aau.cn"
var whttp = inet.whttp();

//開(kāi)始請求
whttp.beginRequest( url )
whttp.send()
//發(fā)送請求

//向服務(wù)器發(fā)送HTTP頭
whttp.writeHeader("Accept-Encoding:gzip, deflate")  

//讀取指定的HTTP頭
var len = whttp.readHeader("Content-Length:") //參數指定頭標
io.print( "文件長(cháng)度", tonumber(len) );

//讀取斷點(diǎn)續傳相關(guān)的頭信息,這個(gè)普通網(wǎng)頁(yè)沒(méi)有,一般需要下載的文件才會(huì )有
var range = whttp.readHeaderRange()
   
//讀取返回數據
for(str,size in var data = whttp.eachRead() ){
    ..io.print( str )
}

//下面關(guān)閉連接,當然下面的函數不是必須調用,即使你忘記了,AAuto也會(huì )自動(dòng)調用
whttp.endRequest();
whttp.close();

當然, AAuto已經(jīng)將上面的代碼封裝為傻瓜化的函數。
僅需要一句代碼就可以下載指定的文件
var data = inet.whttp().get("http://www.aau.cn")


inet.http 的用法與 inet.whttp 的用法完全一樣,
AAuto很多支持庫用法都非常接近, 所以學(xué)習 AAuto 獲得的回報很棒.

inet.http 用于一般的http操作,與客戶(hù)端瀏覽器更接近(雖然沒(méi)有界面)
例如他可以更好的支持持久化cookie.

inet.whttp 則擁有更好的性能和穩定性,可以用于長(cháng)久運行的NT服務(wù)程序開(kāi)發(fā)
關(guān)于這一點(diǎn),可以參考微軟MSDN,AAuto中的inet.http庫也就是WINInet函數的封裝,
而 inet.whttp 則是 WinHTTP 接口的封裝



作者: 神碼    時(shí)間: 2012-4-1 20:29
標題: 標準庫中支持斷點(diǎn)續傳的 inet.httpFile 源碼
//httpFile 下載文件
namespace inet

class httpFile {

     
ctor( url,path,cfg ){
        
this.url = url;
        
this.file = ..io.open(path,"a+b" )
        
if(!this.file)
            
error( '創(chuàng )建文件失敗\n請指定正確的存儲路徑' );
        
        
if(!cfg){
            cfg  = path +
".dowload"
        }
     }
     
     download =
function( headers,referer,accept,flags,postData){
        method = postData?
"POST":"GET"
        
this.file.seek("end")
        
var fileSize = this.file.seek();
        
var rangeInfoOld;
        
        
var http = self.http();
        
if(!http.beginRequest(this.url,method,referer,accept,flags) ){
            
this.file.close();
            http.close();
            
return null,"請求失敗";
        }
        http.writeHeader(headers)
        
        
if( fileSize > 0 ) {
            
if( ..io.exist(cfg,4) ) {
               
var content = ..string.load( cfg );
               
if( content ){
                    rangeInfoOld =
eval( content ) ;
                    
//if( rangeInfoOld.acceptRanges ? ..string.cmp( rangeInfoOld.acceptRanges,"bytes" ) == 0 ) {
                    http.writeHeaderRange(rangeInfoOld,fileSize)
                    
//}
                }
            }
        }  
         
        
var ok;
        ok,err,errCode  = http.send(postData)  
        
if(!ok){
            
this.file.close();
            http.close();
            
return null,err,errCode
        }
        
this.statusCode = err;
        
this.contentLength = errCode;
            
        
//保存一次斷點(diǎn)續傳配置
        var rangeInfoNew = http.readHeaderRange()   
        
if( this.statusCode == 200 ){
            
//如果需要重新下載,存儲相關(guān)信息,清除原來(lái)的文件
            if( fileSize>0 && rangeInfoOld ){
               
if( ! this.contentLength || ( ( rangeInfoNew.eTag == rangeInfoOld.eTag) && ( this.contentLength == fileSize) ) ){
                    http.close()
                    
this.file.close()
                    
return true,"已下載完成, 無(wú)須重新下載!",fileSize
                }
            }
            
if(fileSize!=0){
               
this.file.close();
               
this.file = ..io.open(path,"w+b" )
            }
            rangeInfoNew.contentLength =
this.contentLength
            fileSize = 0;
        }
        
elseif( this.statusCode == 206 ) {
            rangeInfoNew.contentLength =
this.contentLength + fileSize
        }
        
elseif( this.statusCode == 416 ){
            
this.file.close();
            http.close()
            
if( this.contentLength == 0 ){
               
return true,"已下載完成, 無(wú)須重新下載!",fileSize
            }
            
return null,"下載遇到錯誤, HTTP狀態(tài)碼:" + this.statusCode;
        }
        
else {
            
this.file.close();
            
return null,"下載遇到錯誤, HTTP狀態(tài)碼:" + this.statusCode;
        }
        
        ..string.save(cfg,..table.
tostring(rangeInfoNew) )
         
        
//開(kāi)始下載
        if(this.onRecive){  
            
if( this.onReciveBegin )
               
this.onReciveBegin( this.statusCode,this.contentLength,fileSize  )
            
            
var total = this.contentLength  
            
for(str,size in http.eachRead() ){
               
this.file.write(str)
               
if( this.onRecive( str,size,total ) === false ){
                    
this.file.flush();
                    
this.file.close();
                    http.close();
                    
return false;
                }
            }
        }
        
else {
            
for(str,size in http.eachRead() ){
               
this.file.write(str)
            }
        }
        
        
this.file.flush();
        
this.file.close();
        http.close();  
        
return true,,this.contentLength;
     }
}   

namespace httpFile{
    http = ..inet.http : ..inet.whttp;
   
if(!http){
        
error('請在導入inet.file以前\n導入 inet.http 或 inet.whttp ',2)
    }
}

作者: 神碼    時(shí)間: 2012-4-1 20:30
標題: 斷點(diǎn)續傳范例
//創(chuàng )建下載對話(huà)框
import win.ui;
/*DSG{{*/
var winform = win.form( bottom=110;parent=...;right=425;text="AAuto Form" )
winform.add(
button={ bottom=76;right=350;left=191;top=38;z=1;text=
"下載";cls="button" }
)
/*}}*/

import inet.downBox;
winform.button.oncommand =
function(id,event){
   
var downBox = inet.downBox(winform,"下載測試網(wǎng)頁(yè)...")
    downBox.endProc =
function(ret,fileSize,err){
        
if(!err)
            
owner.endModal();
    }
   
    downBox.download(
        
"http://www.ecranesoft.com/public/aauto/lib/java.cab"
        , ..fsys.joinpath(..io._exedir,
"/download/lib/java.cab")
        )
}

winform.show()
win.loopMessage();

作者: 神碼    時(shí)間: 2012-4-1 20:31
標題: 斷點(diǎn)續傳演示
//斷點(diǎn)續傳演示

import fsys;
import inet.http
import inet.httpFile;

io.open()
var remoteFile = inet.httpFile(
   
"http://www.ecranesoft.com/public/aauto/lib/tcc.cab"
    , ..fsys.joinpath(..io._exedir,
"/download/lib/tcc.cab")
    )

remoteFile.onReciveBegin =
function(statusCode,contentLength,fileSize){
   
if( statusCode == 206/*斷點(diǎn)續傳*/ ){
        io.print(
"正在斷點(diǎn)續傳")
    }
   
elseif(fileSize){
        io.print(
"正在重新下載")
    }
   
    io.print(
"未下載長(cháng)度",contentLength,"已下載長(cháng)度",fileSize, "HTTP狀態(tài)碼", statusCode )
}

remoteFile.onRecive =
function(str,size,contentLength){
    io.print(
"總長(cháng)度",contentLength , "下載", size )
   
//return false; //返回false停止下載
}

//下載文件
var ok,fileSize,err = remoteFile.download()

io.print( ok,fileSize,err,inet.lastResponse() )

作者: 神碼    時(shí)間: 2012-4-1 20:32
標題: HTTP文件流方式上傳
//HTTP文件流方式上傳

import process
import inet.http
io.open()
http = inet.http(  );

http.beginRequest(
"http://www.ecranesoft.com/ape/test/post.asp" );

//循環(huán)上傳
http.beginSendData(1000)  
for(i=1;1000;1){
    http.writeData(
tostring(i) )
}
http.endSendData()

//循環(huán)下載
file = io.open("/test.html","w+b")
for(str,size in http.eachRead() ){
    file.write( str );
}

io.print(
"ok")

作者: 神碼    時(shí)間: 2012-4-1 20:36
標題: FTP文件流讀寫(xiě)
//FTP文件流讀寫(xiě)
io.open();

import inet.ftp;

ftp = inet.ftp(
"服務(wù)器IP","用戶(hù)名","密碼");
if(!ftp){
    ..io.print(
"請輸入正確的服務(wù)器參數");
   
return;
}

//顯示當前目錄
io.print( ftp.getCurDir() )

//關(guān)閉服務(wù)器UTF8編碼
ftp.command("OPTS UTF8 off")

file = ftp.open(
"/目錄/文件名.txt","wb")

//支持文件流方式上傳數據,使用循環(huán)即可控制上傳進(jìn)度
file.write("寫(xiě)數據","寫(xiě)更多數據",'\r\n')
file.write(
"寫(xiě)數據","寫(xiě)更多數據",'\r\n')

ftp.close()


附注:以上所有代碼來(lái)自AAuto標準庫,及范例。
無(wú)論是 HTTP,WHTTP,FTP, 底層用法都非常復雜,實(shí)現控制自如的效果都非常困難,而用各函數的用法也各自不同,

AAuto將這一切都進(jìn)行了封裝,并進(jìn)行簡(jiǎn)化,提供了非常簡(jiǎn)單,并幾近一致的接口。
最重要的是,這些都完全重用了系統提供的API,不需要第三方庫,所以你可以自由的使用上面的功能,而且你的程序將會(huì )非常小。而對于互聯(lián)網(wǎng)桌面軟件,size則是必須重視的一個(gè)開(kāi)發(fā)重點(diǎn)。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
【 POST/GET教程】登錄手機QQ空間淺易教程
怎么樣把aau的變量傳遞進(jìn)mysql的查詢(xún)語(yǔ)句
關(guān)于 WebSocket 和 HTTP 區別的思考以及一個(gè)最簡(jiǎn)單的 WebSocket 的客戶(hù)端和服務(wù)器實(shí)現
aauto 快手編程基礎練習一
aauto 調用 DOS 命令
java.io.IOException: Server returned HTTP response code: 403 for URL
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久