AI摘要

本文介绍了如何使用HttpCli组件异步发送POST请求。首先,通过UrlEncode函数对数据进行编码,然后创建TMemoryStream对象,将编码后的数据写入并设置HttpCli的URL和发送方式为PostAsync。在RequestDone事件中,检查错误代码和状态码,若无异常则读取接收到的数据。最后,释放发送和接收的流对象。

procedure THttpPostForm.PostButtonClick(Sender: TObject);
var
    Data : String;
begin
    Data := 'FirstName=' + UrlEncode(Trim('test')) + '&' +
            'LastName='  + UrlEncode(Trim('test123'))  + '&' +
            'Submit=';
    HttpCli1.SendStream := TMemoryStream.Create;
    HttpCli1.SendStream.Write(Data[1], Length(Data));
    HttpCli1.SendStream.Seek(0, 0);
    HttpCli1.RcvdStream := TMemoryStream.Create;
    HttpCli1.URL := Trim('URL');
    HttpCli1.PostAsync;
end;

在RequestDone事件中接收和释放对象
procedure THttpPostForm.HttpCli1RequestDone(
    Sender  : TObject;
    RqType  : THttpRequest;
    ErrCode : Word);
var
    Data : String;
begin
    HttpCli1.SendStream.Free;
    HttpCli1.SendStream := nil;
    if ErrCode <> 0 then //有异常
    begin
        HttpCli1.RcvdStream.Free;
        HttpCli1.RcvdStream := nil;
        Exit;
    end;
    if HttpCli1.StatusCode <> 200 then //返回错误
    begin
        HttpCli1.RcvdStream.Free;
        HttpCli1.RcvdStream := nil;
        Exit;
    end;
    HttpCli1.RcvdStream.Seek(0, 0);
    SetLength(Data, HttpCli1.RcvdStream.Size);
    HttpCli1.RcvdStream.Read(Data[1], Length(Data));
end;



最后修改:2010 年 08 月 18 日
点赞的人是最酷的