我尝试了几个在网上搜索如何用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服务的方法.我在对象的init阶段中设置了所有权限和身份验证.
顾名思义,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, []);