You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Delphi 6中使用Indy 8.0.26的TIdHTTP发送PUT请求的方法咨询

在Indy 8中使用TIdHTTP发送PUT请求

嘿,我来帮你搞定这个问题!在Indy 8里,TIdHTTP确实没有提供现成的Put()方法,但我们可以手动指定请求方法,照样能发送PUT请求。

首先要纠正一个误区:你之前尝试通过ExtraHeaders设置Method是不对的——HTTP请求方法是请求行的核心部分,不是HTTP头字段,得直接设置Request.Method属性。

针对你的代码,我帮你修改成可以发送PUT请求的版本:

var
  Params: TStrings;
  Resp: TMemoryStream;
  RequestStream: TStringStream;
  URI, sResp: AnsiString;
begin
  try
    Params := TStringList.Create;
    Params.Add(EdPost.Text); // 假设这里是你的请求内容(比如完整的JSON串)
    Resp := TMemoryStream.Create;
    RequestStream := TStringStream.Create(Params.Text); // 将参数转换为流格式

    URI := EdUri.Text + Edit6.Text;
    // 配置请求头
    Http1.Request.ContentType := 'application/json';
    Http1.Request.ExtraHeaders.Values['Authorization'] := 'Bearer ' + sTocken;
    // 关键:设置请求方法为PUT
    Http1.Request.Method := 'PUT';

    // 发送PUT请求,用Send方法传递请求流和响应流
    Http1.Send(URI, RequestStream, Resp);

    // 如果需要读取响应内容,可以这样处理
    Resp.Position := 0;
    SetLength(sResp, Resp.Size);
    Resp.ReadBuffer(sResp[1], Resp.Size);
    // 这里可以添加处理响应内容的逻辑
  finally
    // 记得释放所有创建的对象,避免内存泄漏
    Params.Free;
    Resp.Free;
    RequestStream.Free;
  end;
end;

几个需要注意的点:

  • 如果你的请求体是JSON数据,一定要确保ContentType设置为application/json,并且EdPost.Text是完整合法的JSON格式
  • Send()方法是Indy 8里发送自定义请求方法的合适方式,它能接收请求流(包含请求体)和响应流(用来接收服务器返回的内容)
  • 务必在finally块里释放所有创建的对象,这是Delphi里避免内存泄漏的好习惯

内容的提问来源于stack exchange,提问作者Fred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:34:58