使用TNetHTTPRequest / TNetHTTPClient访问Web服务器
TNetHTTPRequest和TNetHTTPClient组件是XE8中添加的新组件。
这是使用TNetHTTPRequest组件和TNetHTTPClient组件访问Web服务器的示例。
将TNetHTTPRequest和TNetHTTPClient组件放置在窗体上之后,将TNetHTTPRequest组件
的Client属性设置为TNetHTTPClient组件。
使用Get方法访问
使用TNetHTTPRequest的Get方法。
var
Url: string;
ResponseContent: TMemoryStream;
Encoding: TEncoding;
begin
URL := 'http://www.xxx.com/';
ResponseContent := TMemoryStream.Create;
Encoding := TEncoding.GetEncoding(932);
NetHTTPRequest1.Get(Url, ResponseContent);
Memo1.Lines.LoadFromStream(ResponseContent, Encoding);
end;
使用Post方法访问
使用TNetHTTPRequest的Post方法。
var
URL: string;
Source: TMultipartFormData;
ResponseContent: TMemoryStream;
Encoding: TEncoding;
begin
URL := 'http://test2.localhost/index.php';
Source := TMultipartFormData.Create;
Source.AddField('param', 'value');
ResponseContent := TMemoryStream.Create;
Encoding := TEncoding.UTF8;
NetHTTPRequest1.Post(URL, Source, ResponseContent);
Memo1.Lines.LoadFromStream(ResponseContent, Encoding);
处理HTTP响应
可以使用TNetHTTPRequest的OnRequestCompleted事件获取响应数据。
procedure TForm1.Button3Click(Sender: TObject);
var
URL: string;
begin
URL := 'http://www.xxx.com/';
NetHTTPRequest1.OnRequestCompleted := Self.RequestCompleted;
NetHTTPRequest1.Get(URL);
end;
procedure TForm1.RequestCompleted(const Sender: TObject;
const AResponse: IHTTPResponse);
var
Encoding: TEncoding;
begin
case AResponse.Version of
THTTPProtocolVersion.UNKNOWN_HTTP:
Memo1.Lines.Add('Version = UNKNOWN_HTTP');
THTTPProtocolVersion.HTTP_1_0:
Memo1.Lines.Add('Version = HTTP_1_0');
THTTPProtocolVersion.HTTP_1_1:
Memo1.Lines.Add('Version = HTTP_1_1');
THTTPProtocolVersion.HTTP_2_0:
Memo1.Lines.Add('Version = HTTP_2_0');
end;
Memo1.Lines.Add('StatusCode = ' + AResponse.StatusCode.ToString);
Encoding := TEncoding.GetEncoding(932);
Memo1.Lines.Add('Content = ' + AResponse.ContentAsString(Encoding));
end;
当TNetHTTPClient的AllowCookies属性设置为True时,收到的cookie将存储在CookieManager中。
var
URL: string;
ResponseContent: TMemoryStream;
Cookies: TCookiesArray;
Cookie: TCookie;
begin
NetHTTPClient1.AllowCookies := True;
URL := 'http://test2.localhost/index.php';
ResponseContent := TMemoryStream.Create;
NetHTTPRequest1.Get(URL, ResponseContent);
Cookies := NetHTTPClient1.CookieManager.Cookies;
for Cookie in Cookies do
begin
Memo1.Lines.Add(Cookie.Name + ' = ' + Cookie.Value);
end;
end;