gpt4 book ai didi

delphi - 通过 Delphi 引用 WinHTTP.dll

转载 作者:可可西里 更新时间:2023-11-01 16:27:19 26 4
gpt4 key购买 nike

自从我第一次使用 Delphi 以来,我一直想知道如何使用 HTTP 请求。我不想使用任何替代的 HTTP 库,因为我习惯于使用 WinHTTP(DLL,而不是 lib)。

那么有人可以尝试向我解释如何通过 Delphi 引用/使用它吗?在 Visual Basic.NET 中,您只需从调色板中选择组件即可。

最佳答案

我已经编写了 WinHttp.dll 和 WinINet.dll 的端口。

参见 SynCrtSock.pas 中定义的 TWinHttpTWinINet 类.它们允许直接访问这些库

下面是 TWinHTTP 使用的低级转换:

{ TWinHTTP }

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;

在同一单元中,您还有 THttpApiServer 类使用快速 http.sys 内核模式服务器实现 HTTP 服务器。

从我的测试中,我发现 TWinHttp/THttpApiServer 类是更快的 HTTP 解决方案,开销比 Indy 或 Synapse 组件少得多,并且具有一些不错的功能,例如原生 HTTPS。

对于那些不了解 WinHttp.dll 的人来说,它比 WinINet.dll 快得多(后者可能非常慢)。因此,TWinHttpTWinINet很多,并且与低级别直接调用 WinSocks 一样快.

关于delphi - 通过 Delphi 引用 WinHTTP.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6099552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com