Paste: IN: http-part

Author: kobi
Mode: factor
Date: Sat, 4 Sep 2010 12:59:48
Plain Text |
USING: accessors assocs continuations http http.client
http.client.private io.encodings.binary kernel math.parser
sequences splitting ;
IN: http-part


: <partial-chunk> ( url from-bytes to-bytes -- request )
    [ <get-request> ] 2dip [ number>string ] bi@ "-" glue "bytes=" prepend "Range" set-header ;
    
: <get-upto-request> ( url #bytes -- request )
    0 swap <partial-chunk> ;
    
: safer-http-request ( request -- response/f data/empty )
    [ http-request ] [
       nip dup download-failed? [ response>> f ] [ drop f f ] if 
    ] recover "" or ;    
    
: http-safe-get ( url -- response/f data/f )
    <get-request> safer-http-request ;
    
: http-partial-get ( url #bytes -- response data/f )
    <get-upto-request> safer-http-request ;

: http-encoding ( url -- encoding/f )
    0 http-partial-get drop dup [ content-encoding>> ] when ;

: valid-page? ( url -- ? )    
    0 http-partial-get nip >boolean ;
    
: http-binary? ( url -- ? )
    http-encoding binary? ;

: http-size ( url -- n )
    0 http-partial-get drop 
    header>> "content-range" swap at
    "/" split1-last nip string>number ;
    
: grab-http-chunk ( url from-bytes to-bytes -- response data )    
    <partial-chunk> safer-http-request ;
    
    

New Annotation

Summary:
Author:
Mode:
Body: