代码:
var
WinHttpReq: OleVariant;
procedure TForm1.Button1Click(Sender: TObject);
begin
WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
WinHttpReq.Open('GET', 'http://stackoverflow.com', TRUE); // asynchronously
WinHttpReq.setRequestHeader('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0');
WinHttpReq.Send();
// HOW to set a callback procedure here and get the response?
end;
注意:我不想导入mshttp.dll并使用TLB。我想通过后期绑定来使用它。如果有异常,我也希望能够处理它们。
编辑: 我接受TLama的答案,因为它给了我一个很好的替代方案。而且它还有一个很好的源代码示例。
这里有一个非常好的 WinHTTPRequest Wrapper with IConnectionPoint for Events 的实现(附有源代码)。
OnResponseDataAvailable
,OnError
等等。顺便问一下,如果代码在主线程中运行,我们需要CoInitialize
吗? - kobikWinHTTPRequest
接收事件。 - kobikCoInitialize
的返回值,如果返回S_FALSE
,则COM库已经初始化。然后它会返回;) - TLama