2014-06-25 20 views
2

部分讀Range頭對我的作品罰款:從READ/PART或URL部分讀通過HTTP READ/SEEK

rebol [] 
client: open tcp://www.apache.org/ 

client/awake: func [event /local port] [ 
    port: event/port 
    switch event/type [ 
     lookup [open port] 
     connect [ 
      write port rejoin [ 
       {GET/HTTP/1.1} crlf 
       {User-Agent: curl/7.26.0} crlf 
       {Host: www.apache.org} crlf 
       {Accept: */*} crlf 
       {Range: bytes=0-9} crlf 
       crlf 
      ] 
     ] 
     wrote [read port] 
     read [ 
      probe to-string port/data 
      probe length? port/data 
      clear port/data 
     ]   
    ] 
    false 
] 

wait [client 3] 
close client 
print "Done" 

我想我可以使用READ /一部分做同樣的事情:

length? read/part http://www.apache.org/ 10 ;40195 
length? read http://www.apache.org/   ;40195 

但它沒有工作,仍然獲得所有的字節。與READ/SEEK相同。 這是爲什麼? (順便說一下,它在Rebol2中有效。)

回答

2

您可以從源頭看

https://github.com/rebol/rebol/blob/master/src/mezz/prot-http.r#L424 

read演員沒有定義任何的改進。這並不意味着他們不能被定義,但目前還沒有做出決定是否應該通過使用改進或使用查詢方言來完成。

你可以通過設置trace/net on看到,它的僞裝它Rebol2

>> trace/net on 
>> read/part http://www.apache.org 10 
URL Parse: none none www.apache.org none none none 
Net-log: ["Opening" "tcp" "for" "HTTP"] 
connecting to: www.apache.org 
Net-log: {GET/HTTP/1.0 
Accept: */* 
Connection: close 
User-Agent: REBOL View 2.7.8.3.1 
Host: www.apache.org 
} 
Net-log: "HTTP/1.1 200 OK" 
Net-log: ["low level read of " 2048 "bytes"] 
Net-log: ["low level read of " 2048 "bytes"] 
.. many lines removed 
Net-log: ["low level read of " 2048 "bytes"] 
Net-log: ["low level read of " 2048 "bytes"] 
Net-log: ["low level read of " 2048 "bytes"] 
== "<!DOCTYPE " 
+0

所以在Rebol2,READ/PART只是獲取的所有數據,並返回它的一部分? 「痕跡」很酷! –

+0

是的。這不是在協議方面完成的。 –

0

這是一個安全的猜測,它只是在當前版本的HTTP方案中沒有實現。還有其他缺失的部分,如重定向,所以我會認爲它還不支持。