Curl support RFC

Lutger Blijdestijn lutger.blijdestijn at gmail.com
Sat Mar 12 11:36:30 PST 2011


Jonas Drewsen wrote:

> On 11/03/11 22.21, Jesse Phillips wrote:
>> I'll make some comments on the API. Do we have to choose Http/Ftp...? The
>> URI already contains this, I could see being able to specifically request
>> one or the other for performance or so www.google.com works.
> 
> That is a good question.
> 
> The problem with creating a grand unified Curl class that does it all is
> that each protocol supports different things ie. http supports cookie
> handling and http redirection, ftp supports passive/active mode and dir
> listings and so on.
> 
> I think it would confuse the user of the API if e.g. he were allowed to
> set cookies on his ftp request.
> 
> The protocols supported (Http, Ftp,... classes) do have a base class
> Protocol that implements common things like timouts etc.
> 
> 
>> And what about properties? They tend to be very nice instead of set
>> methods. examples below.
> 
> Actually I thought off this and went the usual C++ way of _not_ using
> public properties but use accessor methods. Is public properties
> accepted as "the D way" and if so what about the usual reasons about why
> you should use accessor methods (like encapsulation and tolerance to
> future changes to the API)?
> 
> I do like the shorter onHeader/onContent much better though :)
> 
> /Jonas

Properties *are* accessor methods, with some sugar. In fact you already have 
used them, try it:

http.setReceiveHeaderCallback =  (string key, string value) {
    writeln(key ~ ":" ~ value);
};

Marking a function with @property just signals it's intended use, in which 
case it's nicer to grop the get/set prefixes. Supposedly using parenthesis 
with such declarations will be outlawed in the future, but I don't think 
that's the case currently.

>> Jonas Drewsen Wrote:
>>
>>> //
>>> // Simple HTTP GET with sane defaults
>>> // provides the .content, .headers and .status
>>> //
>>> writeln( Http.get("http://www.google.com").content );
>>>
>>> //
>>> // GET with custom data receiver delegates
>>> //
>>> Http http = new Http("http://www.google.dk");
>>> http.setReceiveHeaderCallback( (string key, string value) {
>>> writeln(key ~ ":" ~ value);
>>> } );
>>> http.setReceiveCallback( (string data) { /* drop */ } );
>>> http.perform;
>>
>> http.onHeader = (string key, string value) {...};
>> http.onContent = (string data) { ... };
>> http.perform();



More information about the Digitalmars-d mailing list