[Lazarus] Accessing freedb.org using Indy's TIdHTTP Get method
Antonio Fortuny
a.fortuny at sitasoftware.lu
Tue Jun 11 10:33:23 CEST 2013
Le 10/06/2013 21:49, Alejandro Gonzalo a écrit :
> Using fpc's cddb unit I was able to form the freedb query string from
> the CD in my drive (for "The Great Bluesmen" it was : 2b10b215 21 150
> 12557 26267 48645 60997 77047 91730 103462 117580 129470 145975 160670
> 185985 199220 213447 228725 250610 270005 283037 292752 309990 4276).
> Using the instructions at
> http://staffwww.dcs.shef.ac.uk/people/D.Abbott/Library/freedb.howto1.06.txt
> I tried using the Get method of Indy's TIdHTTP component to
> go retrieve the album info, but I just get error messages (usually 500
> Command syntax error: incorrect number of arguments).
> Could some kind person please give me a successful example of using
> TIdHttp.get (or the equivalent in Synapse) with freedb.org? Are there
> Properties I need to set?
> Thank you.
> A. G.
>
>
I've read in the howto that the GET is not supported and POST bust be
used instead. After having quickly read the text it seems that the
request is adressed to a form using fields descriptors. This meand that
the header must be filled in as the URL requests it. Y guess you shoud
use something like
var
data: TIdMultiPartFormDataStream;
ResponseStream: TStringStream;
Reponse: String;
IdIntercept: TIdConnectionIntercept; // might not be needed
begin
... some initialization code
IdIntercept := TIdConnectionIntercept.Create(nil); // might not be
needed
data := TIdMultiPartFormDataStream.Create;
with TIdHTTP.Create(nil) do try
// use a timeout to get control back if URL does not answer
ConnectTimeout := 20000;
// might not be needed but usefull to trace what happens
IdIntercept.OnConnect := @HttpInterceptConnect;
IdIntercept.OnDisconnect := @HttpInterceptDisconnect;
IdIntercept.OnReceive := @HttpInterceptReceive; // <--- this
one could be important to use
IdIntercept.OnSend := @HttpInterceptSend;
// you maight use these event if you want to inform the use on
how things are going on
OnStatus := IdHTTPSStatus;
OnWork := IdHTTPSWork;
OnWorkBegin := IdHTTPSWorkBegin;
OnWorkEnd := IdHTTPSWorkEnd;
Request.ContentLength := -1;
Request.ContentRangeEnd := 0;
Request.ContentRangeStart := 0;
Request.Accept := 'text/html, */*';
Request.BasicAuthentication := False;
Request.UserAgent := 'Some identification(compatible; Indy Library)';
Request.Username := 'some_uer_if_needed';
Request.Password := 'user_password?';
HTTPOptions := [hoForceEncodeParams];
Request.ContentType := 'application/x-www-form-urlencoded';
data.AddFormField('no_client', AClient);
... as many fields as needed
Request.ContentLength := data.size;
ResponseStream.Position := 0;
Request.ContentLength := data.size;
Post(HTTPPostServer, data, ResponseStream);
ResponseStream.Position := 0;
Reponse := ResponseStream.DataString;
finally
Free;
data.Free;
IdIntercept .Free
end
> --
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20130611/f64d76cc/attachment-0003.html>
More information about the Lazarus
mailing list