Windows Internet

网址:http://baike.baidu.com/view/560670.htm

WinInet

求助编辑百科名片

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

目录

WinInet
WinInet 层关系
Internet 的连接
展开

编辑本段WinInet

Internet传输协议

  WinInet API的文件位于/Platform SDK/Internet, Intranet, Extranet Services/Internet Tools and Technologies/WinInet API。
  请参见MSDN For VS 2005的详细资料:
  Microsoft provides many APIs for programming both client and server applications. Many new applications are being written for the Internet, and as technologies, browser capabilities, and security options change, new types of applications will be written. Browsers run on client computers, providing access to the World Wide Web and displaying HTML pages that contain text, graphics, ActiveX controls, and documents. Servers provide FTP, HTTP, and gopher services, and run server extension applications using CGI and ISAPI. Your custom application can retrieve information and provide data on the Internet....
  深入剖析 WinInet
  1、Linux的Socket资料
  2、EPOLL的资料
  3、 HTTP SERVER 的资料
  4、深入windows 源代码

WinInet 概述

  ⊙ Hinternet 句柄的层次关系
  ⊙ HTTP 函数层次关系
  ⊙ 典型的 HTTP 客户端程序的处理流程
  1、普通 WinInet 处理函数
  ⊙ InternetOpen 初始化 WinInet.dll
  ⊙ InternetOpenUrl 打开 Url,读取数据
  ⊙ InternetAttemptConnect 尝试建立到 Internet 的连接
  ⊙ InternetConnect 建立 Internet 的连接
  ⊙ InternetCheckConnection 检查 Internet 的连接是否能够建立
  ⊙ InternetSetOption 设置一个 Internet 选项
  ⊙ InternetSetStausCallback 安装一个回调函数,供 API 函数调用
  ⊙ InternetQueryOption 查询在一个指定句柄上的 Internet 选项
  ⊙ InternetQueryDataAvailable 查询可用数据的数量
  ⊙ InternetReadFile(Ex) 从一个打开的句柄读取数据
  ⊙ InternetFindNextFile 继续文件搜寻
  ⊙ InetrnetSetFilePointer 为 InternetReadFile 设置一个文件位置
  ⊙ InternetWriteFile 将数据写到一个打开的 Internet 文件
  ⊙ InternetLockRequestFile 允许用户为正在使用的文件加锁
  ⊙ InternetUnlockRequestFile 解锁被锁定的文件
  ⊙ InternetTimeFromSystemTime 根据指定的 RFC 格式格式化日期和时间
  ⊙ InternetTimeToSystemTime 将一个 HTTP 时间/日期字串格式化为 SystemTime 结构对象
  ⊙ InternetConfirmZoneCrossing 检查在安全 URL 和非安全 URL 间的变化
  ⊙ InternetCloseHandle 关闭一个单一的 Internet 句柄
  ⊙ InternetErrorDlg 显示错误信息对话框
  ⊙ InternetGetLastResponesInfo 获取最近发送的 API函数的错误

HTTP 处理函数

  ⊙ HttpOpenRequest 打开一个 HTTP 请求的句柄
  ⊙ HttpSendRequert(Ex) 向 HTTP 服务器发送指定的请求
  ⊙ HttpQueryInfo 查询有关一次 HTTP 请求的信息
  ⊙ HttpEndRequest 结束一个 HTTP 请求
  ⊙ HttpAddRequestHeaders 添加一个或多个 HTTP 请求报头到 HTTP请求句柄
  3、FTP 处理函数
  ⊙ FtpCreateDirectory 在 Ftp 服务器新建一个目录
  ⊙ FtpDelectFile 删除存储在 Ftp 服务器上的文件
  ⊙ FtpFindFirstFile 查找给定 Ftp 会话中的指定目录
  ⊙ FtpGetCurrentDirectory 为指定 Ftp 会话获取当前目录
  ⊙ FtpGetFile 从 Ftp 服务器下载文件
  ⊙ FtpOpenFile 访问一个远程文件以对其进行读写
  ⊙ FtpPutFile 向 Ftp 服务器上传文件
  ⊙ FtpRemoveDirectory 在 Ftp 服务器删除指定的文件
  ⊙ FtpRenameFile 为 Ftp 服务器上的指定文件改名
  ⊙ FtpSetCurrentDirectory 更改在 Ftp 服务器上正在使用的目录

本文排版格式为

  正文由窗口自动换行;所有代码以 80 字符为边界;中英文字符以空格符分隔。
  正文

编辑本段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
  HttpSendRequert(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 存取类型,可以是:
  1、INTERNET_OPEN_TYPE_PRECONFIG =0 使用 IE 中的连接设置
  2、INTERNET_OPEN_TYPE_DIRECT =1 直接连接到服务器
  3、INTERNET_OPEN_TYPE_PROXY =3 通过代理服务器进行连接
  为 3 时需指定代理服务器地址
  3、lpszProxy CERN 代理服务器地址,一般设置为 null;
  4、lpszProxyBypass 代理服务器地址;
  5、dwFlags 标记,一般设置为 0,可以是:
  1、INTERNET_FLAG_DONT_CACHE 不在缓存中保存取得的内容
  2、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 标记,可以是:
  1、INTERNET_FLAG_RELOAD 强制重读数据
  2、INTERNET_FLAG_DONT_CACHE 不保存到缓存
  3、INTERNET_FLAG_TRANSFER_ASCII 使用文本数据
  4、INTERNET_FLAG_TRANSFER_BINARY 使用二进制数据
  6、dwContext 上下文标记,如果使用回调功能时这个值将传送给回调函数

编辑本段Internet 的连接

  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,可以是:
  1、INTERNET_SERVICE_FTP = 1; 连接到一个 FTP 服务器上
  2、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 连接标志
  1、INTERNET_FLAG_NO_CACHE_WRITE 标志不缓冲写
  2、INTERNET_FLAG_KEEP_CONNECTION 保持连接
  3、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. }
  4、INTERNET_FLAG_IGNORE_CERT_CN_INVALID { bad common name in X509 Cert. }
  5、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 值大小
开放分类:
程式设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP使用CURL抓取页面

cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具&#xff0c;他能够从互联网上获得各种各样的网络资源。简单来说&#xff0c;curl就是抓取页面的升级版。 <?php//1.初始化&#xff0c;创建一个新cURL资源$ch curl_init(); //2.设置URL和相应的选…

Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问

最近在公司生产环境中部署Lync Server 2013并对公网发布后&#xff0c;发现公网未加域客户端在与内网用户共享PPT时&#xff0c;会报证书错误&#xff0c;如下图所示&#xff1a;但是内网是正确的&#xff0c;经过查询了一下Lync 客户端自身的日志信息后发现&#xff0c;公网客…

用WinInet开发Internet客户端应用指南

一&#xff1a;http://www.vckbase.com/document/viewdoc/?id545 二&#xff1a;http://www.vckbase.com/document/viewdoc/?id546 用WinInet开发Internet客户端应用指南&#xff08;一&#xff09; 编译/NorthTibet 一、概述一个Internet客户端程序的目的是通过Internet…

WebService的基本概念:java webservice,什么是webservice

WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求&#xff0c;轻量级的独立的通讯技术。 这种技术允许网络上的所有系统进行交互。随着技术的发展&#xff0c;一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解…

掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...

掌握常见的内部排序方法&#xff08;插入排序&#xff0c;冒泡排序&#xff0c;选择排序&#xff0c;快速排序&#xff0c;堆排序&#xff0c;希尔排序&#xff0c;归并排序&#xff0c;基数排序等&#xff09;。数组高级以及Arrays(掌握)排序方法空间复杂度时间复杂度稳定性插…

关于Android错误 View requires API level 14 (current...

2019独角兽企业重金招聘Python工程师标准>>> 问题描述&#xff1a;在界面配置文件main.xml中&#xff0c;可能用上某些控件&#xff08;例如GridLayout&#xff09;遇上下面所说的错误:View requires API level 14(current min is 8), 但将项目clear后&#xff0c;再…

socket-select函数

最近在用socket编程&#xff0c;用到select函数&#xff0c;于是上网查找资料&#xff0c;如下这篇是讲的比较详细易懂的&#xff1a;Select在Socket编程中还是比较重要的&#xff0c;可是对于初学Socket的人来说都不太爱用Select写程序&#xff0c;他们只是习惯写诸如 connect…

javascript 基础 转

最近面试过一些人, 发现即使经验丰富的开发人员, 对于一些基础的理论和细节也常常会模糊. 写本文是因为就我自己而言第一次学习下面的内容时发现自己确实有所收获和感悟. 其实我们容易忽视的javascript的细节还有更多, 本文仅是冰山一角. 希望大家都能通过本文有所斩获.一. Jav…

从表到里学习JVM实现

在社会化分工、软件行业细分专业化的趋势下&#xff0c;会真的参与到底层系统实现的人肯定是越来越少&#xff08;比例上说&#xff09;。真的会参与到JVM实现的人肯定是少数。但如果您对JVM是如何实现的有兴趣、充满好奇&#xff0c;却苦于没有足够系统的知识去深入&#xff0…

2019春第二次课程设计实验报告

2019春第二次课程设计实验报告 一、实验项目名称 用数组实现反弹球消砖块 二、实验项目功能描述 利用键盘按键控制小球方向让小球碰到挡板后反弹上去消除砖块。 三、项目模块结构介绍 四、实现界面展示 五、代码托管链接 https://gitee.com/huangxuannn/events 六、实验总结 上…

[SharePoint 2010] Client Object Model 跨时区查询list item的方法

SharePoint将所有的Datetime类型的数据都以universal的形式(UTC)存储在数据库中&#xff0c;当要在页面上显示类似list item的"Created", "Modified"等时间日期信息时&#xff0c;将数据库中的UTC时间取出来&#xff0c;然后根据当前Site的Regional Settin…

Linux下静态库和动态库的编译连接

http://blog.sina.com.cn/s/blog_4090ba590100t3nu.html .a文件 gcc -c test.c ar rc libtest.a test.o ranlib libtest.a 静态库只要编译出.o文件然后用ar打入包中就可以 动态库或共享库不用libtool工具&#xff1a; gcc -fpic -o test.o -c test gcc -shared -o te…

修改终端服务端口的方法

修改终端服务端口的方法Windows 2000 下的修改办法   win2k的终端服务可以运行在两种方式下&#xff1a;远程管理或应用程序服务器模式。   远程管理模式&#xff1a;允许一定数量的管理员远程管理这个服务器&#xff0c;这个模式对服务器性能的影响程度最低。   应用程序…

PYTHON -c

命令行执行代码转载于:https://www.cnblogs.com/BlueFire-py/p/10957663.html

Linux显示中文乱码解决方法

http://sumit.blog.51cto.com/162317/206698经常使用linux终端&#xff0c;有人上传中文命名的文件显示出中文乱码&#xff0c;下面是解决方法。默认显示的字符编码# echo $LANGen_US.UTF-8修改i18n文件# vi /etc/sysconfig/i18nLANG"zh_CN.GB18030"LANGUAGE"zh…

多行字符串的表示方式

原文载于&#xff1a;http://robinwu.iteye.com/blog/145514 其中最重要的、忽略一切转义字符、多行大包围、相当于的多行版本 1 str <<EOF 2 This isnt a tab: \t 3 and this isnt a newline: \n 4 EOF 5 6 puts str 转载于:https://www.cnblogs.com/kloboh…

nodejs+redis

为什么80%的码农都做不了架构师&#xff1f;>>> redis可以用来管理session http://www.csser.com/board/4f77e6f996ca600f78000936 然后使用的时候redis-server这个服务进程得开着&#xff0c;不然会悲剧的 转载于:https://my.oschina.net/kiloct/blog/137629

Caused by: java.lang.ClassNotFoundException: Cannot find class: User

源代码: <select id"selectAll" resultType"User">select user_id uid,user_name username,user_password password,user_gender gender, user_birthday birthday, user_status status from users</select> 正确代码: <select id"s…

标准C语言库 Glibc 2.15

http://www.oschina.net/p/glibc Glibc 是提供系统调用和基本函数的 C 库&#xff0c;比如open, malloc, printf等等。所有动态连接的程序都要用到它。 Glibc最新更新资讯&#xff0c;共2条 (投递新闻) 1个月前GNU libc 2.15 (Glibc) 发布 2评/952阅 7个月前GLib 2.30.0 发布&…

FxCAD 实验三 实现对象的【属性】事件

接着实验三&#xff0c;本次实验&#xff0c;实现鼠标右键点击【图形对象时】可以弹出一个【WinForm】属性界面 添加一个WindowsForm 界面&#xff0c;如图。类名字&#xff1a;FormBox 回到FxBox类文件 覆盖 SelectEvent 方法&#xff0c;添加上面的代码 运行程序&#xff0c;…