HttpQueryInfo的使用

BOOL WINAPI HttpQueryInfo(
HINTERNET hRequest,
DWORD dwInfoLevel,
LPVOID lpBuffer,
LPDWORD lpdwBufferLength,
LPDWORD lpdwIndex
);
参数:
hRequest:HTTP请求返回的句柄。
dwInfoLevel:指定的属性的组合查询和请求进行修改的标志,下面的表显示了可能的属性值。
lpBuffer:指针指向的缓冲区,接收的信息。
lpdwBufferLength:指针的值包含的数据缓冲区的长度。
lpdwIndex:长指针,用于列举多个具有相同名称的头一个从零开始的头索引,不需要可设置为NULL。
链接库:Wininet.lib

下面是dwInfoLevel的取值:
描述
常量值
HTTP_QUERY_ACCEPT
检索可以接受的媒体类型的响应。
24
HTTP_QUERY_ACCEPT_CHARSET
检索的响应可接受的字符集。
25
HTTP_QUERY_ACCEPT_ENCODING
获取可接受的内容编码值的响应。
26
HTTP_QUERY_ACCEPT_LANGUAGE
可接受的自然语言检索的响应。
27
HTTP_QUERY_ACCEPT_RANGES
检索范围的请求被接受的资源的类型。
42
HTTP_QUERY_AGE
检索Age的响应头域。
48
HTTP_QUERY_ALLOW
接收服务器所支持的方法。
7
HTTP_QUERY_AUTHORIZATION
获取用于请求的授权证书。
28
HTTP_QUERY_CACHE_CONTROL
获取高速缓存控制指令。
49
HTTP_QUERY_CONNECTION
获取指定一个特定的连接。
23
HTTP_QUERY_COOKIE
检索与请求相关联的Cookie。
44
HTTP_QUERY_CONTENT_BASE
检索在实体解析相对URL的基URI。
50
HTTP_QUERY_CONTENT_DESCRIPTION
已过时,保持传统的应用程序兼容性。
 
HTTP_QUERY_CONTENT_DISPOSITION
已过时,保持传统的应用程序兼容性。
 
HTTP_QUERY_CONTENT_ENCODING
接收已被施加到整个资源的任何额外的内容编码。
29
HTTP_QUERY_CONTENT_ID
接收内容识别。
3
HTTP_QUERY_CONTENT_LANGUAGE
接收该内容是英寸的语言
6
HTTP_QUERY_CONTENT_LENGTH
接收到的资源大小,以字节为单位。
5
HTTP_QUERY_CONTENT_LOCATION
检索包含在消息的实体资源位置。
51
HTTP_QUERY_CONTENT_MD5
获取MD5。
52
HTTP_QUERY_CONTENT_RANGE
获取完整实体中应该被插入部分的位置和实体的总大小。
53
HTTP_QUERY_CONTENT_TRANSFER_ENCODING
接收附加的编码已被应用到的资源的内容。
2
HTTP_QUERY_CONTENT_TYPE
接收的内容类型的资源(如text / HTML)。
1
HTTP_QUERY_COST
不再执行。
15
HTTP_QUERY_DATE
接收的日期和时间,在该消息起源。
9
HTTP_QUERY_DERIVED_FROM
不再支持。
 
HTTP_QUERY_ETAG
检索相关的实体的实体标签。
54
HTTP_QUERY_EXPIRES
接收的日期和时间后,资源应该被认为是过时的。
10
HTTP_QUERY_FORWARDED
已过时,保持传统的应用程序兼容性。
30
HTTP_QUERY_HOST
检索被请求的Internet主机和端口号。
55
HTTP_QUERY_IF_MATCH
检索的If-Match请求标头字段的内容。
56
HTTP_QUERY_IF_MODIFIED_SINCE
检索的If-Modified-Since头信息的内容。
32
HTTP_QUERY_IF_NONE_MATCH
如果无匹配的请求标头字段的内容检索。
57
HTTP_QUERY_IF_UNMODIFIED_SINCE
检索的内容,如果未改性的自请求标头字段。
59
HTTP_QUERY_LINK
已过时,保持传统的应用程序兼容性。
 
HTTP_QUERY_LAST_MODIFIED
接收服务器认为资源为最后修改的日期和时间,在该时间。
11
HTTP_QUERY_LOCATION
获取的绝对URI在Location应答头。
33
HTTP_QUERY_MAX
检索一个HTTP_QUERY_ *值的最大值。
78
HTTP_QUERY_MAX_FORWARDS
检索代理或网关,可以将请求转发到下一个入站服务器的数量。
60
HTTP_QUERY_MESSAGE_ID
不再执行。
12
HTTP_QUERY_MIME_VERSION
接收被用来构造消息的MIME协议的版本。
0
HTTP_QUERY_ORIG_URI
已过时,保持传统的应用程序兼容性。
34
HTTP_QUERY_PRAGMA
接收特定于实现的指令可能适用于任何收件人沿着请求/响应链。
17
HTTP_QUERY_PROXY_AUTHENTICATE
检索代理返回的身份验证方案和领域。
41
HTTP_QUERY_PROXY_AUTHORIZATION
检索是用来识别用户要求身份验证的一个代理的标头。
61
HTTP_QUERY_PUBLIC
接收方法可在此服务器上。
8
HTTP_QUERY_RANGE
检索的字节范围的实体。
62
HTTP_QUERY_RAW_HEADERS_CRLF
接收所有由服务器返回的HEAD。
22
HTTP_QUERY_REFERER
接收得到所请求的URI的资源的URI。
35
HTTP_QUERY_REFRESH
已过时,保持传统的应用程序兼容性。
 
HTTP_QUERY_REQUEST_METHOD
接收正在请求中使用的动词,通常是GET或POST。
45
HTTP_QUERY_RETRY_AFTER
获取预期服务不可用的时间量。
36
HTTP_QUERY_SERVER
检索所使用的软件的源服务器处理请求的信息。
37
HTTP_QUERY_SET_COOKIE
接收数值为请求设置的cookie。
43
HTTP_QUERY_STATUS_CODE
接收由服务器返回的状态码。
19
HTTP_QUERY_STATUS_TEXT
接收服务器返回的响应行的任何额外的文本。
20
HTTP_QUERY_TITLE
已过时,保持传统的应用程序兼容性。
38
HTTP_QUERY_TRANSFER_ENCODING
获取转换类型,可以在正确的发送者和接收者之间传送。
63
HTTP_QUERY_UPGRADE
获取额外的服务器所支持的通信协议。
64
HTTP_QUERY_URI
接收部分可以识别的Request-URI资源的统一资源标识符(URI)。
13
HTTP_QUERY_USER_AGENT
获取发出请求的用户代理的信息。
39
HTTP_QUERY_VARY
获取header,指示该实体选自可用的响应,使用服务器驱动的协商。
65
HTTP_QUERY_VERSION
在收到最后由服务器返回的响应代码。
18
HTTP_QUERY_WARNING
获取更多的信息,可能不能反映响应状态码的响应的状态。
67
HTTP_QUERY_WWW_AUTHENTICATE
检索由服务器返回的身份验证方案和领域。
40


例子:
procedure Get(const url: string; head, res: TStream);
var
  hInt, hUrl: HINTERNET;
  buffer: PChar;
  dwRead: cardinal;
  flag: Boolean;
  len, index: Cardinal;
begin
  GetMem(buffer, 65536);
  hInt := InternetOpen('Delphi', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  hurl := InternetOpenUrl(hInt, PChar(url), nil, 0, INTERNET_FLAG_RELOAD, 0);
  len := 65536;
  index := 0;
 //查询响应头信息
  flag := HttpQueryInfo(hUrl, HTTP_QUERY_RAW_HEADERS_CRLF, buffer, len, index);
  if flag then
  begin
    head.Write(buffer^, len);
    repeat
      if not InternetReadFile(hUrl, buffer, 1000, dwRead) then
        Break;
      if dwRead <> 0 then
        res.Write(buffer^, dwRead);
    until dwRead = 0;
  end;
  InternetCloseHandle(hUrl);
  InternetCloseHandle(hInt);
  FreeMem(buffer);
end;


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。