什么是WinHTTP?「建议收藏」

什么是WinHTTP?「建议收藏」WinHTTP的全称是MicrosoftWindowsHTTPServices,它提供给开发者一个HTTP客户端应用程序接口(API),通过这种API借助HTTP协议给其他的HTTP服务器发

大家好,又见面了,我是你们的朋友全栈君。

WinHTTP的全称是Microsoft Windows HTTP Services, 它提供给开发者一个HTTP客户端应用程序接口(API), 通过这种API借助HTTP协议给其他的HTTP服务器发送请求.

 

WinHTTP支持桌面应用程序, Windows系统服务, 和Windows服务器端应用程序.

对于基于Microsoft .NET Framework的应用程序, 不推荐使用WinHTTP服务, 因为.NET Framework应用程序应该使用在System.Net命名空间下的网络基础设施类型.

WinHTTP提供了两种编程方式, 一种是C\C++的API, 另一种是COM组件.

 

WinHTTP与WinINet的区别

================

WinHTTP被设计为主要应用在服务器端应用程序的场景下, 让服务器端应用程序访问HTTP服务器.

WinINet是一种更老的技术, 它被设计为一个HTTP客户端平台, 用于交互式桌面应用程序, 比如说IE, Office等.

服务器端应用程序要求HTTP客户端服务使用WinHTTP而不是WinINet.

 

WinHTTP和WinINet在微软是由不同的团队来提供支持的.

 

WinHTTP与Proxy

================

如果HTTP Proxy需要认证(authentication), 那么HTTP Application会收到407(proxy requires authentication). 除了这个状态码, 代理服务器还会发送一个或更多的authenticate headers: “Proxy-Authenticate”. 这些信息足够我们在network monitor trace中鉴定HTTP无法访问是否是由于proxy需要认证引起的了.

 

WinHTTP的proxy配置是存储在注册表键

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\WinHttpSettings

当中的, 修改和查看需要使用一个命令行工具proxycfg.

 

实际上, 通过代理来使用WinHTTP访问HTTP和HTTPS的主机有两种方式.

  • 在应用程序中指定代理配置. 举例如下:
    • hSession = WinHttpOpen( L"WinHTTP Example/1.0",  
                          WINHTTP_ACCESS_TYPE_NAMED_PROXY,
                          L"proxy_name", 
                          L"<local>", 
                          0);
    • 或者
    • WINHTTP_PROXY_INFO proxyInfo;
      proxyInfo.dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY;
      proxyInfo.lpszProxy = L"proxy_name";
      proxyInfo.lpszProxyBypass = L"<local>";
          
      // Set the proxy information for this session.
      WinHttpSetOption( hSession, 
                        WINHTTP_OPTION_PROXY, 
                        &proxyInfo, 
                        sizeof(proxyInfo));
  • 在应用程序外配置默认的代理配置, 这里需要使用位于%windir%\system32目录下的命令行工具proxycfg.exe.
    • proxycfg -p "http=http_proxy https=https_proxy" "<local>;*.microsoft.com"
      上面的命令指定使用名为http_proxy的代理服务器访问http主机, 使用名为https_proxy的代理服务器访问https主机. 
      该命令还指定了访问local intranet的站点还有任何匹配"*.microsoft.com"的站点的时候, 不使用代理.

WinHTTP和System.Net中的类在配置代理时的区别

===============

上面讲到过, 如果应用程序是基于.net framework的, 那么并不推荐使用WinHTTP来作为http客户端, 推荐使用的是System.Net中的类型. WinHTTP可以用上面的代码或proxycfg来配置, System.Net下的类型靠啥来配置呢?

 

答案是靠config文件. .Net Framework使用标准的XML文件作为配置文件, 存放配置信息. 可执行文件有.config文件, asp.net站点有web.config文件.

config文件中的<system.Net>元素中包含有指定.net framework如何连接网络的配置信息. 其中的<defaultProxy>元素包含的就是HTTP代理服务器的配置. 这个元素有三个子元素:

  1. bypasslist- 提供了一个正则表达式的集合, 用于描述不适用代理的站点.
  2. module- 为应用程序添加一个新的proxy module
  3. proxy- 指定proxy服务器

举例

<configuration>
  <system.net>
    <defaultProxy>
      <bypasslist>
        <add address="[a-z]+\.contoso\.com$" />
        <add address="192\.168\.\d{1,3}\.\d{1,3}" />
      </bypasslist>
    </defaultProxy>
  </system.net>
</configuration>

 

参考资料:

Windows HTTP Services

http://msdn.microsoft.com/en-us/library/aa384273%28v=VS.85%29.aspx 

ProxyCFG on Win2003 和 NetSH on Win2008

http://www.cnblogs.com/awpatp/archive/2010/05/13/1734762.html

Using the WinHTTP Proxy Configuration Utility

http://msdn.microsoft.com/en-us/library/ms761351%28VS.85%29.aspx

ProxyCfg.exe, a Proxy Configuration Tool

http://msdn.microsoft.com/en-us/library/aa384069%28v=VS.85%29.aspx

<bypasslist> Element (Network Settings)

http://msdn.microsoft.com/en-us/library/31465c77.aspx

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154197.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux 安装 rabbitmq 3.7.16 详细教程[通俗易懂]

    前提:下载依赖,安装rabbitmq需要下载以下依赖,这里可以提前下载上。依次执行以下命令安装依赖类库:#yum-yinstallmakegccgcc-c++kernel-develm4ncurses-developenssl-devel#yuminstallxmlto-y执行成功后如下(complete)一、安装erlang(最新版本22….

    2022年4月17日
    37
  • MySql多库查询及连表查询[通俗易懂]

    MySql多库查询及连表查询[通俗易懂]多库查询时,默认为当前连接的数据库,如果需要别的数据库时可在表面前加数据库名称即可实现,多库多表连接及查询

    2022年8月19日
    9
  • ip2long之后有什么好处?

    ip2long之后有什么好处?

    2021年10月18日
    41
  • Java实现Excel导入和导出,看这一篇就够了(珍藏版)

    Java实现Excel导入和导出,看这一篇就够了(珍藏版)前言最近抽了两天时间,把Java实现表格的相关操作进行了封装,本次封装是基于POI的二次开发,最终使用只需要调用一个工具类中的方法,就能满足业务中绝大部门的导入和导出需求。环境准备1.Maven依赖本次工具类的封装主要依赖于阿里巴巴的JSON包,以及表格处理的POI包,所以我们需要导入这两个库的依赖包,另外,我们还需要文件上传的相关包,毕竟我们在浏览器页面,做Excel导入时,是上传的Excel文件。<!–文件上传–><dependency>

    2022年6月28日
    128
  • 手机版我的世界怎么查看自己的坐标_我的世界怎样tp坐标点

    手机版我的世界怎么查看自己的坐标_我的世界怎样tp坐标点我的世界手机版中坐标可以方便定位,但是在PE版中不像PC版那么方便可以直接查看坐标。今天4399蕾米为大家带来我的世界手机版坐标怎么看,PE版没有MOD怎么查看坐标,一起来学习一下吧!▍坐标怎么看1.在指令框中输入/tp~~~,输出指令以后就能看到自己的坐标。坐标相关的指令比图/tp/teleport/spawnpoint/setworldspawn等,都能通过~~~来表示当前位置…

    2022年9月23日
    1
  • 黑盒测试的优缺点_黑盒测试的概念

    黑盒测试的优缺点_黑盒测试的概念黑盒测试概念:又称功能测试或数据驱动测试,是用来检测每个功能是否正常使用。黑盒测试主要意味着测试要在软件的接口处进行,这种测试方法是将测试对象看成一个盒子,测试人员不考虑内部,直接按照需求规则说明书,直接检查他的功能是否符合要求。如上图所示,将系统看成黒盒,内部如何实现是不需要了解的,只需要知道输入和预期输出。黑盒的优缺点介绍:黑盒测试的优点有:1.不需要了解程序内部的代码及实现,操作…

    2022年10月3日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号