如何用Indy发送DELETE请求?

 手机用户2502921455 发布于 2023-02-05 10:03

我尝试了几个在网上搜索如何用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阶段中设置了所有权限和身份验证.

1 个回答
  • 顾名思义,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, []);
    

    2023-02-05 10:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有