Download binary file

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Download binary file

Jorge Guerra
Hi everyone,

I'm trying to download a binary file (an mp3) from a given URL, at the
moment I've found two possible solutions:

1) Use the Network.Socket library from ghc to get the file. The problem
with this is that I'll have to deal with the HTTP protocol (done), and
read the Handle in binary mode however I don't understand how to do
this, in particular how to deal with the buffer (Prt?).

2) Use a system program like wget in linux systems.  But I don't know
how to call a system command from haskell, and besides I wan't my
program to be portable at least between windows and linux.

Any sugestions?

Sorry for my newbie question.

Thanks.

--
Jorge E. Guerra D.
Departamento de Computación y Tecnología de la Información
Universidad Simón Bolívar

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: Download binary file

Kurt Hutchinson
Using buffers to read and write from a Handle is pretty easy. You can
use 'allocaBytes' (from Foreign.Marshal.Alloc) to allocate the buffer
size you want, and a Ptr to that gets passed to the IO computation
that you give to allocaBytes as an argument. You can see a simplistic
example of network IO with buffers here:
http://shootout.alioth.debian.org/benchmark.php?test=tcprequest&lang=ghc&id=2

In particular, the last function, 'requestLoop', uses a buffer to read
a specific number of bytes from a Handle on each iteration.

On 11/14/05, Jorge Guerra <[hidden email]> wrote:

> Hi everyone,
>
> I'm trying to download a binary file (an mp3) from a given URL, at the
> moment I've found two possible solutions:
>
> 1) Use the Network.Socket library from ghc to get the file. The problem
> with this is that I'll have to deal with the HTTP protocol (done), and
> read the Handle in binary mode however I don't understand how to do
> this, in particular how to deal with the buffer (Prt?).
>
> 2) Use a system program like wget in linux systems.  But I don't know
> how to call a system command from haskell, and besides I wan't my
> program to be portable at least between windows and linux.
>
> Any sugestions?
>
> Sorry for my newbie question.
>
> Thanks.
>
> --
> Jorge E. Guerra D.
> Departamento de Computación y Tecnología de la Información
> Universidad Simón Bolívar
>
> _______________________________________________
> Haskell-Cafe mailing list
> [hidden email]
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe