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;
http://blog.csdn.net/hutao1101175783/article/details/42589783
|