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;

时间: 2024-08-10 15:12:13

HttpQueryInfo的使用的相关文章

WinInet编程中如何使用异步

在WinInet编程中,同步的使用方法如下: InternetOpen->InternetOpenUrl->HttpQueryInfo->InternetReadFile->InternetCloseHandle;在InternetOpenUrl和InternetReadFile时会导致程序阻塞,知道操作完成,同步的好处就是比较简单,调试方便. 异步的使用方法如下: 1)InternetOpen,需指定是异步: 2)InternetSetStatusCallback,设置回调: 3

C# 文件下载 : WinINet

在 C# 中,除了 WebClient 我们还可以使用一组 WindowsAPI 来完成下载任务.这就是 Windows Internet,简称 WinINet.本文通过一个 demo 来介绍 WinINet 的基本用法和一些实用技巧. 接口介绍 相比 WebClient 的用法,Win32API 在使用时可能会烦琐一些.所以先把用到的 API 简单介绍一下. 资源的初始化和释放 InternetOpen这是需要调用的第一个方法,它会初始化内部数据结构,为后面的调用做准备. InternetCl

Win32GUICode

// WIN32DownLoad.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "WIN32DownLoad.h" #include <wininet.h> #include <stdio.h> #include <stdlib.h> #include <mmsystem.h> #include &l

[Delphi]检查URL是否有效的函数

function CheckUrl(url: string): boolean; var hSession, hfile, hRequest: hInternet; dwindex, dwcodelen: dword; dwcode: array[1..20] of char; res: pchar; begin if pos('http://', lowercase(url)) = 0 then url := 'http://' + url; Result := false; hSession

《C++编程艺术》第五章 下载工具源码

今天看了书上的第五章代码,看了后想编译起来结果报了好些错,修改完后已经可以正确的编译起来,供大家下载研究 // Header file for downloader. Call this file dl.h. #include <iostream> #include <string> #include <windows.h> #include <wininet.h> #include <fstream> using namespace std;

C++ http

C++调用HTTP实现方式 Http访问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向服务器提交数据,程序中使用POST方式,提交数据并从服务器获取返回值. 为实现Http访问,微软提供了二套API:WinINet, WinHTTP.WinHTTP比WinINet更加安全和健壮,可以这么认为WinHTTP是WinINet的升级版本.程序中,通过一个宏的设置来决定是使用WinHttp还是WinINet. #define USE_WINHTTP      //Comment

Windows相关知识

(一)LoadMaps();三个参数,代表选中前,中,选中后要出现的效果的图片ID:(二)Createthread与_beginthreadex的区别1.主要是使用Createthread在c中使用时多线程返回错误码给全局变量errno时容易出错,很容易导致数据覆盖问题出现.2._beginthreadex每个线程创建都将拥有自己专用的一块内存区域来共标准c运行库中所有有需要的函数使用.都要记得closehandle防止内核泄露.3.mfc中用WriteProfileInt等方法保存用用程序配置

URL是否有效

unit Unit1; interface uses    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type    TForm1 = class(TForm)        Button1: TButton;        Edit1:

WinInet API详解

一.概述 WinInet(「Windows Internet」)API帮助程序员使用三个常见的Internet协议,这三个协议是:用于World Wide Web万维网的超文本传输协议(HTTP:Hypertext Transfer Protocol).文件传输协议(FTP:File Transfer Protocol)和另一个称为Gopher的文件传输协议.WinInet函数的语法与常用的Win32 API函数的语法类似,这使得使用这些协议就像使用本地硬盘上的文件一样容易. 1.WinInet