how to use curl to download a file

Frédéric Galusik fredg at salixosnospam.org
Wed Nov 2 09:31:30 PDT 2011


Le Wed, 02 Nov 2011 15:09:17 +0000, Graham Fawcett a écrit :

> On Tue, 01 Nov 2011 18:20:25 +0000, Frédéric Galusik wrote:
> 
>> Hi,
>> 
>> As the curl documentation is a little bit ...wow.
>> http://www.digitalmars.com/d/2.0/phobos/etc_c_curl.html
>> 
>> Do someone have a simple example on how to download a simple file ?
>> 
>> Thank you.
> 
> Until the high-level bindings for curl are available in Phobos, I have a
> little module you could use.
> 
> https://github.com/gmfawcett/d-play-libcurl/blob/master/fawcett/curl.d
> 
> The default version prints the result to stdout, and there's a commented
> main() that shows how to get a callback when data is received. If you
> wanted to download directly into a file, you could do this:
> 
> import std.stdio;
> import fawcett.curl;
> 
> class FileCurl : Curl
> {
>   this(string url, File f) {
>     handle = curl_easy_init();
>     set(CURLoption.URL, url);
>     set(CURLoption.FILE, cast(void*) f.getFP);
>   }
> 
> }
> 
> void main() {
>   auto f = File("/tmp/stuff", "w");
>   auto c = new FileCurl("http://example.com/", f); c.perform();
> }
> 
> Note, it doesn't call super() in the constructor, which is bad form, but
> the current default constructor is overkill for just downloading a file.
> (It's not a production-quality curl binding.)
> 
> Rather than putting my module in 'fawcett/curl.d', you might just want
> to remove the 'module' line in 'curl.d' and put it in the same directory
> as your program.
> 
> Best,
> Graham

Thank you very much, it's very interesting.

Best regards.

++ fredg


More information about the Digitalmars-d-learn mailing list