请告知在Delphi中是否有WinHTTP包装器
按优先次序:
解决方案:
由于注释不允许格式化代码,所以我在问题中粘贴解决方案:
const
winhttpdll = 'winhttp.dll';
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY = 0;
WINHTTP_FLAG_REFRESH = $00000100;
WINHTTP_FLAG_SECURE = $00800000;
WINHTTP_ADDREQ_FLAG_COALESCE = $40000000;
WINHTTP_QUERY_FLAG_NUMBER = $20000000;
function WinHttpOpen(pwszUserAgent: PWideChar; dwAccessType: DWORD;
pwszProxyName, pwszProxyBypass: PWideChar; dwFlags: DWORD): HINTERNET; stdcall; external winhttpdll;
function WinHttpConnect(hSession: HINTERNET; pswzServerName: PWideChar;
nServerPort: INTERNET_PORT; dwReserved: DWORD): HINTERNET; stdcall; external winhttpdll;
function WinHttpOpenRequest(hConnect: HINTERNET; pwszVerb: PWideChar;
pwszObjectName: PWideChar; pwszVersion: PWideChar; pwszReferer: PWideChar;
ppwszAcceptTypes: PLPWSTR; dwFlags: DWORD): HINTERNET; stdcall; external winhttpdll;
function WinHttpCloseHandle(hInternet: HINTERNET): BOOL; stdcall; external winhttpdll;
function WinHttpAddRequestHeaders(hRequest: HINTERNET; pwszHeaders: PWideChar; dwHeadersLength: DWORD;
dwModifiers: DWORD): BOOL; stdcall; external winhttpdll;
function WinHttpSendRequest(hRequest: HINTERNET; pwszHeaders: PWideChar;
dwHeadersLength: DWORD; lpOptional: Pointer; dwOptionalLength: DWORD; dwTotalLength: DWORD;
dwContext: DWORD): BOOL; stdcall; external winhttpdll;
function WinHttpReceiveResponse(hRequest: HINTERNET;
lpReserved: Pointer): BOOL; stdcall; external winhttpdll;
function WinHttpQueryHeaders(hRequest: HINTERNET; dwInfoLevel: DWORD; pwszName: PWideChar;
lpBuffer: Pointer; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; stdcall; external winhttpdll;
function WinHttpReadData(hRequest: HINTERNET; lpBuffer: Pointer;
dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall; external winhttpdll;
function WinHttpQueryDataAvailable(hRequest: HINTERNET; var lpdwNumberOfBytesAvailable: DWORD): BOOL;
stdcall; external winhttpdll;
function WinHttpSetOption(hInternet: HINTERNET; dwOption: DWORD; lpBuffer: Pointer; dwBufferLength: DWORD): BOOL;
stdcall; external winhttpdll;
function WinHttpQueryOption(hInternet: HINTERNET; dwOption: DWORD; var lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL;
stdcall; external winhttpdll;
function WinHttpWriteData(hRequest: HINTERNET; lpBuffer: Pointer; dwNumberOfBytesToWrite: DWORD;
var lpdwNumberOfBytesWritten: DWORD): BOOL; stdcall; external winhttpdll;
function WinHttpCheckPlatform(): BOOL; stdcall; external winhttpdll;还有几个人失踪了:
WinHttpCrackUrl
WinHttpCreateUrl
WinHttpSetStatusCallback
WinHttpTimeFromSystemTime
WinHttpTimeToSystemTime发布于 2011-07-17 19:05:56
如果要在应用程序中实现HTTP客户端访问,可以考虑以下几种选择:
对于我们的ORM,对于它的HTTP1.1连接层,我们试图避免外部依赖,而不需要所有Indy的特性和开销。
我们首先编写了自己的WinSock包装器,然后试用了WinInet。当我们在测试基准上使用时,我们发现WinINet非常慢。
然后我们尝试了微软提供的新API -- WinHTTP,我们发现这是非常迅速的。与直接WinSock访问一样快,不需要编写所有包装代码。
下面是我们的OpenSource WinHTTP包装器,在单位名为SynCrtSock中。测试从德尔福5到XE。
您将看到,我们对WinINet和WinHTTP都使用了相同的泛型类。事实上,这两个库都非常接近。
见这篇文章的详细内容。有一个关于自动代理检索的说明。
编辑:有了即将推出的德尔菲XE2,您将能够交叉编译到Mac。在本例中,使用“抽象”类(如SynCrtSock )是非常有意义的。在Windows下,它将使用WinHTTP,但在Mac下,它将调用socket。要编译代码,只需调整类类型,而不是代码。
发布于 2011-07-17 18:17:34
C:\Windows\system32\winhttp.dll然后用它:
var
http: IWinHttpRequest;
szUrl: WideString;
begin
szUrl := 'http://stackoverflow.com/questions/6725348/winhttp-delphi-wrapper';
http := CoWinHttpRequest.Create;
http.open('GET', szUrl, False);
http.send(EmptyParam);
if (http.status = 200) then
ShowMessage(http.responseText);所以:
https://stackoverflow.com/questions/6725348
复制相似问题