我在网上搜索了几个关于如何使用TIDHTTP发送DELETE请求但没有成功的示例...
我正在使用Delphi Indy 10.0.52。 显然,在TIdHTTP对象中没有像Delete那样的方法。 可能吗? 我在这里错过了一些东西......帮助!
我最终得到了这样的东西(不工作):
procedure TRestObject.doDelete( deleteURL:String );
var
res : TStringStream;
begin
res := TStringStream.Create('');
http := TidHTTP creation and init...
try
http.Request.Method := IdHTTP.hmDelete;
http.Put( deleteURL, res );
except
on E: EIdException do
showmessage('Exception (class '+ E.ClassName +'): ' + E.Message);
on E: EIdHTTPProtocolException do
showmessage('Protocol Exception (HTTP status '+ IntToStr(E.ErrorCode) +'): ' + E.Message);
on E: EIdSocketError do
showmessage('Socket Error ('+ IntToStr(E.LastError) +'): ' + E.Message);
end;
res.Free;
end;
这是一个对象中已经处理GET,PUT,POST到使用django-tastypie实现的RESTful Web服务的方法。我在对象的初始阶段设置了所有权限和身份验证。
答案 0 :(得分:5)
顾名思义,TIdHTTP.Put()
强制请求方法为PUT
。所以你不能用它来发送其他请求。
10.0.52是一个非常老的版本,你真的应该升级到最新的10.6.0,它有一个TIdHTTP.Delete()
方法:
http.Delete(deleteURL, res);
如果这不是一个选项,那么要发送10.0.52的自定义请求,您将不得不拨打TIdHTTP.DoRequest()
。但是,DoRequest()
被声明为protected
,因此您必须使用访问者类来调用它,例如:
type
TIdHTTPAccess = class(TIdHTTP)
end;
TIdHTTPAccess(http).DoRequest('DELETE', deleteURL, nil, res, []);
答案 1 :(得分:2)
您可以查看此delphi rest客户端 https://github.com/fabriciocolombo/delphi-rest-client-api
查看文件HttpConnectionIndy.pas如何实现删除。
procedure TIdHTTP.Delete(AURL: string);
begin
try
DoRequest(Id_HTTPMethodDelete, AURL, Request.Source, nil, []);
except
on E: EIdHTTPProtocolException do
raise EHTTPError.Create(e.Message, e.ErrorMessage, e.ErrorCode);
end;
end;