gpt4 book ai didi

delphi - WinHttp Delphi 包装器

转载 作者:行者123 更新时间:2023-12-03 14:42:52 27 4
gpt4 key购买 nike

请告知Delphi XE中是否有WinHTTP包装器

按优先顺序排列:

  1. 开箱即用的 Delphi 单元
  2. 带有移植入口例程的第三方开源 pas 文件
  3. xxx_TLB.pas 包装器

解决方案:

由于注释不允许格式化代码,我将解决方案粘贴到问题中:

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

最佳答案

如果你想在你的应用程序中实现HTTP客户端访问,你可以考虑以下几种选择:

  • 使用提供的 Indy 组件;
  • 使用第三方组件,例如 Synapse、ICS 或您自己的基于 WinSock 的包装器;
  • 使用WinINet;
  • 使用 WinHTTP。

对于our ORM ,对于它的HTTP/1.1连接层,我们尽量避免外部依赖,并且不需要Indy的所有功能和开销。

我们首先编写了自己的 WinSock 包装器,然后尝试了 WinInet。当在我们的测试基准上使用时,我们发现 WinINet 非常慢。

然后我们尝试了 WinHTTP,这是 Microsoft 提供的新 API,我们发现它的速度非常快。与直接 WinSock 访问一样快,无需编写所有包装器代码。

这是我们的开源 WinHTTP 包装器,位于 unit named SynCrtSock 中。从 Delphi 5 到 XE 进行了测试。

您将看到我们对 WinINet 和 WinHTTP 使用相同的泛型类。事实上,两个库非常接近。

参见this article for details 。有一个关于自动代理检索的注释。

编辑:随着即将推出的 Delphi XE2,您将能够交叉编译到 Mac OS X。在这种情况下,使用“抽象”类确实非常有意义,例如 SynCrtSock。在Windows下,它将使用WinHTTP,但在Mac OS X下,它将调用套接字API。要使您的代码编译,您只需调整类类型,而不是您的代码。

关于delphi - WinHttp Delphi 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6725348/

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