在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
相关产品推荐
相关产品推荐

