gpt4 book ai didi

delphi - WinInet HttpQueryInfo 可以返回原始字节吗? (带有 unicode 字符的 HTTP header )

转载 作者:行者123 更新时间:2023-12-03 18:29:02 25 4
gpt4 key购买 nike

内置例程 HttpQueryInfo 返回一个字符串,而不是实际字节。通常这不是问题。

但是,最近我开始遇到服务器发出重定向的问题,其中位置 header 字段包含一个包含非百分比编码的 unicode/或?人物。有什么办法吗?

        var
vContent_Wide: WideString;
begin
vBufferSize := 4096;
GetMem(vBufferPtr, vBufferSize);
while True do
begin
TmpFakeCardinal := 0;
vErrorNone := HttpQueryInfo(
hHttpOpen_Request,
HTTP_QUERY_RAW_HEADERS_CRLF,
vBufferPtr,
vBufferSize,
TmpFakeCardinal
);
if (vErrorNone = False) then
begin
vErrorID := GetLastError;
if (vErrorID = ERROR_INSUFFICIENT_BUFFER) then
begin
FreeMem(vBufferPtr);
GetMem(vBufferPtr, vBufferSize);
end
else Break;
end
else
begin
vContent_Wide := PWideChar(vBufferPtr);
Result := vContent_Wide;
Break;
end
;
end;
FreeMem(vBufferPtr, vBufferSize);

最佳答案

URI 不支持未编码的 Unicode 字符。如果服务器在 Location 中发送非百分比编码的 Unicode 字符串 header ,则服务器有问题,需要修复,因为这明显违反了 RFC 2616 section 14.30 .我的猜测是服务器实际上正在发送未映射的 IRI ( RFC 3987 ) 而不是 URI ( RFC 3986 )。 HTTP 不支持直接使用 IRI,它们必须映射到 URI(RFC 3987 定义了如何做到这一点)。
话虽如此,请检查是否设置 dwInfoLevel HTTP_QUERY_CUSTOM 的参数允许 HttpQueryInfo()是否返回 header 的原始字节。如果没有,那么您将无法将 WinInet 用于那些出现故障的服务器,因为 WinInet API 中没有其他函数可以访问 HTTP header 。您必须找到另一个支持您需要的 HTTP 库,否则您可以下拉到 TCP/IP 层并在您自己的代码中手动实现 HTTP 协议(protocol)。

关于delphi - WinInet HttpQueryInfo 可以返回原始字节吗? (带有 unicode 字符的 HTTP header ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12487341/

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