Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

download part of remote files

by rmckillen (Novice)
on Mar 08, 2001 at 00:44 UTC ( #62823=perlquestion: print w/ replies, xml ) Need Help??
rmckillen has asked for the wisdom of the Perl Monks concerning the following question:

How can I use perl to download the last 128 bytes of a file located on another server?

Comment on download part of remote files
Re: download part of remote files
by rpc (Monk) on Mar 08, 2001 at 01:01 UTC
    This is a very vague question.

    1. What kind of server?
    2. What transfer protocol?
    3. Why exactly do you need to do this?
      I know that LWP can be used to download files from a remote server, something like:
      $file = HTTP::Request->new(GET => 'http://www.server.com/filename.mp3' +);
      The last 128 bytes of an mp3 contain information about the file such as length, artist, song, etc. I want to download only the last 128 bytes so I can get to this information and store it in a mysql database.

      So I guess my question is, what do I replace that line of code with so it only gets the last 128 bytes?

        HTTP does not have a facility like FTP's RESTORE afaik. I think you'll have to get the whole thing.

        What rpc says ... if you are on good terms with the people running the server, you might ask them kindly could they do this indexing themselves, and make the mp3 tags available to you. Otherwise, you're going to have to grab the whole thing.

        Update Looky how tye's answer was the one I ended up suggesting =)

        Philosophy can be made out of anything. Or less -- Jerry A. Fodor

        RFC2068 (HTTP/1.1) describes a partial-content protocol. If a response comes back with "Accept-Ranges: bytes" then you may ask for "Range: bytes=-128" in a request, and get just the last 128 bytes. That'd be like this:
        my $url = "http://www.server.com/filename.mp3"; use LWP::UserAgent; my $ua = LWP::UserAgent->new; use HTTP::Request::Common; my $response = $ua->simple_request(GET $url, Range => 'bytes=-128'); if ($response->is_success) { print "last 128 bytes is: ", substr($response->content, -128), "\n"; print "(although entire content was retrieved)\n" if length ($respon +se->content) > 128; }
        Note that if the range request is not honored, you'll get back the entire content instead. If you wanted, you can probe first to see if the "Accept-ranges" header is in the response for that particular URL.

        -- Randal L. Schwartz, Perl hacker

(tye)Re: download part of remote files
by tye (Cardinal) on Mar 08, 2001 at 01:14 UTC

    Go to the owner of the server and say, "Hey, I'll give you this nice interpretter if you'll give me the last 128 bytes of that file right there." ??

    Sorry, I couldn't resist. Please be much more specific.

            - tye (but my friends call me "Tye")

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://62823]
Front-paged by cjf
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2014-12-25 21:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (163 votes), past polls