WinInet

1、WinInet 是一个 网络编程接口,包含了 Internet 底层协议 HTTP,FTP。
2、借助 WinInet 接口,可不必去了解 Winsock、TCP/IP 和特定 Internet 协议
的细节就可以编写出高水平的 Internet 客户端程序。
3、WinInet 为 HTTP、FTP 提供了统一的函数集,也就是 Win32 API 接口。
4、WinInet 简化了 HTTP、FTP 协议的编程,可轻松地将 Internet 集成到应用程序中。

Hinternet 句柄的层次关系

1、首先通过 InternetOpen 函数创建位于根部的 Hinternet 句柄,
然后才能通过其进一步建立 HTTP、FTP 的连接。
2、使用 InternetConnect 函数创建一个指定的连接,它将通过传递给它的参数为指定的
站点初始化 HTTP、FTP 连接并创建一个从根句柄分支出去的 Hinernet 句柄。
3、 HttpOpenRequest 和 FtpOpenFile、FtpFindFirstFile等函数将使用 InternetConnect
所创建的句柄以建立到指定站点的连接。

HTTP 函数层次关系

1、对于 WWW 服务器提供的资源可以直接通过 InternetOpenUrl 或是 HTTP 函数对潜在
的协议进行处理来访问。
2、由于 HTTP 协议是在不断发展的,当这些底层协议被更新后也将影响这些 HTTP 函数行为
3、 InternetOpen、InternetConnect、 HttpOpenRequest 将返回 Hinternet 句柄,而
HttpAddRequestHeaders、HttpQueryInfo、HttpSendRequest、HttpSendRequestEx、
InternetErrorDlg 将使用它们所依靠的这些函数创建的 Hinternet句柄。

FTP 函数层次关系

1、FTP 函数需要请求得到特定类型的 Hinternet句柄才能正常工作,这些句柄的创建
必须按一定次序来进行:
1、首先使用 InternetOpen 创建根句柄,然后才能通过 InternetConnect 创建一个
FTP连接句柄
2、该图展示了依赖于 InternetConnect 所返回FTP 连接句柄的 FTP函数之间的层次关系。

典型的 HTTP 客户端程序的处理流程

1、目的:开始 HTTP会话,建立 HTTP 连接
方法:InetrnetOpen、
InternetAttemptConnect
InternetConnect
结果:初始化 WinInet.dll 并联接服务器,返回相应的句柄
2、目的:创建一个 HTTP请求
方法: HttpOpenRequest
结果:
3、目的:发送一个 HTTP请示
方法:HttpAddRequestHeaders
HttpSendRequest(Ex)
结果:
4、目的:读文件
方法:InternetReadFile(Ex)
结果:使用你提供的缓冲读指定的字节
5、目的:获取 HTTP请求信息
方法:HttpQueryInfo
结果:从服务器获取 HTTP 请求头信息
6、目的: 异常处理
方法:InternetGetLastResponesInfo
InternetErrorDlg
结果:处理所有普通的异常类型
7、目的:结束 HTTP 会话
方法:HttpEndRequest、
InternetCloseHandle
结果:自动清除打开的句柄的连接

InetrnetOpen 初始化

1、声明:
function InternetOpen(lpszAgent: PChar;
dwAccessType: DWORD;
lpszProxy,
lpszProxyBypass:PChar;
dwFlags: DWORD): HINTERNET; stdcall;
2、参数:
1、lpszAgent 应用程序名,可以自定义
2、dwAccessType 存取类型,可以是:
①INTERNET_OPEN_TYPE_PRECONFIG =0 使用 IE 中的连接设置
②INTERNET_OPEN_TYPE_DIRECT =1 直接连接到服务器
③INTERNET_OPEN_TYPE_PROXY =3 通过 代理服务器进行连接
为 3 时需指定代理服务器地址
3、lpszProxy CERN 代理服务器地址,一般设置为 null;
4、lpszProxyBypass 代理服务器地址;
5、dwFlags 标记,一般设置为 0,可以是:
①INTERNET_FLAG_DONT_CACHE 不在缓存中保存取得的内容
②INTERNET_FLAG_OFFLINE 脱机方式
InternetOpenUrl 打开 Url,读取数据
1、声明:
function InternetOpenUrl(hInet: HINTERNET;
lpszUrl: PChar;
lpszHeaders: PChar;
dwHeadersLength: DWORD;
dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
2、参数:
1、hInet 由 InternetOpen 返回的句柄
2、lpszUrl 文件 Url 地址,以 http:,ftp:打头的 Url 地址;
3、lpszHeaders 发送到服务器的数据头;
4、dwHeadersLength 发送到服务器的数据头长度
5、dwFlags 标记,可以是:
①INTERNET_FLAG_RELOAD 强制重读数据
②INTERNET_FLAG_DONT_CACHE 不保存到缓存
③INTERNET_FLAG_TRANSFER_ASCII 使用 文本数据
④INTERNET_FLAG_TRANSFER_BINARY 使用二进制数据
6、dwContext 上下文标记,如果使用回调功能时这个值将传送给 回调函数

3Internet 的连接编辑

1、声明:
function InternetConnect(hInet: HINTERNET;
lpszServerName: PChar;
nServerPort: INTERNET_PORT;
lpszUsername: PChar;
lpszPassword: PChar;
dwService: DWORD;
dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
2、参数:
1、hInet 由 InternetOpen 返回的句柄
2、lpszServerName 服务器的地址
HTTP 地址必须为服务器名作 InternetOpenUrl 语法分析
3、nServerPort HTTP协议 端口号(缺省80)
4、lpszUsername 用户名
5、lpszPassword 用户密码
6、dwService 决定服务类型 HTTP,FTP,可以是:
①INTERNET_SERVICE_FTP = 1; 连接到一个 FTP 服务器上
②INTERNET_SERVICE_HTTP = 3; 连接到一个 HTTP 服务器上
7、dwFlags
8、dwContext

HttpOpenRequest

1、声明:
function HttpOpenRequest(hConnect: HINTERNET;
lpszVerb: PChar;
lpszObjectName: PChar;
lpszVersion: PChar;
lpszReferrer: PChar;
lplpszAcceptTypes: PLPSTR;
dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
2、参数:
1、hConnect InternetConnect句柄
2、lpszVerb 命令字,如果为 NULL,使用 缺省值“GET”
3、lpszObjectName 命令对象,通常是一个文件名、 可执行文件或是一个搜索列表
4、lpszVersion HTTP版本,如果为空,将使用“HTTP/1.0”
5、lpszReferrer 一个网址,可以为空
6、lplpszAcceptTypes中 程序接收的文件类型列表。把 空值传给该函数即通知了服务器只有文本文件可以被接收
'application/octet-stream'
7、dwFlags 标志 使用 or 连接标志
①INTERNET_FLAG_NO_CACHE_WRITE 标志不缓冲写
②INTERNET_FLAG_KEEP_CONNECTION 保持连接
③INTERNET_FLAG_SECURE { use PCT/SSL if applicable (HTTP) }
{ Security Ignore Flags, Allow HttpOpenRequest to overide
Secure Channel (SSL/PCT) failures of the following types. }
④INTERNET_FLAG_IGNORE_CERT_CN_INVALID { bad common name in X509 Cert. }
⑤INTERNET_FLAG_IGNORE_CERT_DATE_INVALID { expired X509 Cert. }
8、dwContext Integer(Self)?

向 HTTP 服务器发送指定的请求

1、声明:
function HttpSendRequest(hRequest: HINTERNET;
lpszHeaders: PChar;
dwHeadersLength: DWORD;
lpOptional: Pointer;
dwOptionalLength: DWORD): BOOL; stdcall;
2、参数:
1、hRequest HttpOpenRequest句柄
2、lpszHeaders 服务请求的数据头
3、dwHeadersLength 服务请求的数据头的长度
4、lpOptional 紧跟在标题后任意数据的地址,此参数一般用于 POST 和 PUT 操作
5、dwOptionalLength 数据的长度
InternetSetOption 设置一个 Internet 选项
1、声明
function InternetSetOption(hInet: HINTERNET;
dwOption: DWORD;
lpBuffer: Pointer;
dwBufferLength: DWORD): BOOL; stdcall;
2、参数:
1、hInet 句柄
2、dwOption Internet 选项,可以是:
①INTERNET_OPTION_SEND_TIMEOUT 设置,发送请求和连接时的超时时间
②INTERNET_OPTION_RECEIVE_TIMEOUT 设置,接收请求和连接时的超时间间
3、lpBuffer 值
4、dwBufferLength 值大小
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值