Windows HTTP Services 参考资料

Windows HTTP Services 参考资料
2009年12月14日
  参考:http://msdn2.microsoft.com/en-us/library/aa384273(VS.85).aspx
  WinHttp; // Microsoft WinHTTP Services, version 5.1
  Alias HTTPREQUEST_PROXY_SETTING;
  I4
  Alias HTTPREQUEST_SETCREDENTIALS_FLAGS;
  I4
  Enum WinHttpRequestOption; // WinHttpRequest Options
  GUID={12782009-FE90-4877-9730-E5E183669B19};
  WinHttpRequestOption_UserAgentString = 0;
  WinHttpRequestOption_URL = 1;
  WinHttpRequestOption_URLCodePage = 2;
  WinHttpRequestOption_EscapePercentInURL = 3;
  WinHttpRequestOption_SslErrorIgnoreFlags = 4;
  WinHttpRequestOption_SelectCertificate = 5;
  WinHttpRequestOption_EnableRedirects = 6;
  WinHttpRequestOption_UrlEscapeDisable = 7;
  WinHttpRequestOption_UrlEscapeDisableQuery = 8;
  WinHttpRequestOption_SecureProtocols = 9;
  WinHttpRequestOption_EnableTracing = 10;
  WinHttpRequestOption_RevertImpersonationOverSsl = 11;
  WinHttpRequestOption_EnableHttpsToHttpRedirects = 12;
  WinHttpRequestOption_EnablePassportAuthentication = 13;
  WinHttpRequestOption_MaxAutomaticRedirects = 14;
  WinHttpRequestOption_MaxResponseHeaderSize = 15;
  WinHttpRequestOption_MaxResponseDrainSize = 16;
  WinHttpRequestOption_EnableHttp1_1 = 17;
  WinHttpRequestOption_EnableCertificateRevocationCheck = 18;
  Enum WinHttpRequestAutoLogonPolicy;
  GUID={9D8A6DF8-13DE-4B1F-A330-67C719D62514};
  AutoLogonPolicy_Always = 0;
  AutoLogonPolicy_OnlyIfBypassProxy = 1;
  AutoLogonPolicy_Never = 2;
  Enum WinHttpRequestSslErrorFlags;
  GUID={152A1CA2-55A9-43A3-B187-0605BB886349};
  SslErrorFlag_UnknownCA = $100;
  SslErrorFlag_CertWrongUsage = $200;
  SslErrorFlag_CertCNInvalid = $1000;
  SslErrorFlag_CertDateInvalid = $2000;
  SslErrorFlag_Ignore_All = $3300;
  Enum WinHttpRequestSecureProtocols;
  GUID={6B2C51C1-A8EA-46BD-B928-C9B76F9F14DD};
  SecureProtocol_SSL2 = 8;
  SecureProtocol_SSL3 = 32;
  SecureProtocol_TLS1 = 128;
  SecureProtocol_ALL = 168;
  Dispatch IWinHttpRequest; // IWinHttpRequest Interface
  GUID={016FE2EC-B2C8-45F8-B23B-39E53A75396B};
  function QueryInterface(riid:^GUID; out ppvObj:^^void);
  function AddRef: UI4;
  function Release: UI4;
  function GetTypeInfoCount(out pctinfo:^UINT);
  function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
  function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
  function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
  function SetProxy(ProxySetting:HTTPREQUEST_PROXY_SETTING; [ProxyServer:variant; BypassList:variant]);
  function SetCredentials(UserName:BSTR; Password:BSTR; Flags:HTTPREQUEST_SETCREDENTIALS_FLAGS);
  function Open(Method:BSTR; Url:BSTR; [Async:variant]);
  function SetRequestHeader(Header:BSTR; Value:BSTR);
  function GetResponseHeader(Header:BSTR): BSTR;
  function GetAllResponseHeaders: BSTR;
  function Send([Body:variant]);
  property-get Status: I4;
  property-get StatusText: BSTR;
  property-get ResponseText: BSTR;
  property-get ResponseBody: variant;
  property-get ResponseStream: variant;
  property-get Option(Option:WinHttpRequestOption): variant;
  property-put Option(Option:WinHttpRequestOption; variant);
  function WaitForResponse([Timeout:variant]): bool;
  function Abort;
  function SetTimeouts(ResolveTimeout:I4; ConnectTimeout:I4; SendTimeout:I4; ReceiveTimeout:I4);
  function SetClientCertificate(ClientCertificate:BSTR);
  function SetAutoLogonPolicy(AutoLogonPolicy:WinHttpRequestAutoLogonPolicy);
  Interface IWinHttpRequestEvents; // IWinHttpRequestEvents Interface
  GUID={F97F4E15-B787-4212-80D1-D380CBBF982E};
  function OnResponseStart(Status:I4; ContentType:BSTR);
  function OnResponseDataAvailable(Data:^^UI1);
  function OnResponseFinished;
  function OnError(ErrorNumber:I4; ErrorDescription:BSTR);
  Class WinHttpRequest; // WinHttpRequest component
  GUID={2087C2F4-2CEF-4953-A8AB-66779B670495};
  function QueryInterface(riid:^GUID; out ppvObj:^^void);
  function AddRef: UI4;
  function Release: UI4;
  function GetTypeInfoCount(out pctinfo:^UINT);
  function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
  function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
  function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
  function SetProxy(ProxySetting:HTTPREQUEST_PROXY_SETTING; [ProxyServer:variant; BypassList:variant]);
  function SetCredentials(UserName:BSTR; Password:BSTR; Flags:HTTPREQUEST_SETCREDENTIALS_FLAGS);
  function Open(Method:BSTR; Url:BSTR; [Async:variant]);
  function SetRequestHeader(Header:BSTR; Value:BSTR);
  function GetResponseHeader(Header:BSTR): BSTR;
  function GetAllResponseHeaders: BSTR;
  function Send([Body:variant]);
  property-get Status: I4;
  property-get StatusText: BSTR;
  property-get ResponseText: BSTR;
  property-get ResponseBody: variant;
  property-get ResponseStream: variant;
  property-get Option(Option:WinHttpRequestOption): variant;
  property-put Option(Option:WinHttpRequestOption; variant);
  function WaitForResponse([Timeout:variant]): bool;
  function Abort;
  function SetTimeouts(ResolveTimeout:I4; ConnectTimeout:I4; SendTimeout:I4; ReceiveTimeout:I4);
  function SetClientCertificate(ClientCertificate:BSTR);
  function SetAutoLogonPolicy(AutoLogonPolicy:WinHttpRequestAutoLogonPolicy);
  function OnResponseStart(Status:I4; ContentType:BSTR);
  function OnResponseDataAvailable(Data:^^UI1);
  function OnResponseFinished;
  function OnError(ErrorNumber:I4; ErrorDescription:BSTR);
  ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
  示例:
  同步获取数据
  代码:
  function getText(strURL)
  {
  var strResult;
  try
  {
  // Create the WinHTTPRequest ActiveX Object.
  var WinHttpReq = new ActiveXObject(
  "WinHttp.WinHttpRequest.5.1");
  // Create an HTTP request.
  var temp = WinHttpReq.Open("GET", strURL, false);
  // Send the HTTP request.
  WinHttpReq.Send();
  // Retrieve the response text.
  strResult = WinHttpReq.ResponseText;
  }
  catch (objError)
  {
  strResult = objError + "\n"
  strResult += "WinHTTP returned error: " +
  (objError.number & 0xFFFF).toString() + "\n\n";
  strResult += objError.description;
  }
  // Return the response text.
  return strResult;
  }
  WScript.Echo(getText("http://www.microsoft.com/default.htm"));
  ------------------------------------------------------------------------------------------------------------------------------------------------------------------
  改为异步获取
  代码:
  // Create a HTTP request.
  var temp = WinHttpReq.Open("GET", strURL, true);//此处由false改成true
  -------------------------------------------------------------------------------------------------------------------------------------------------------------------
  在访问ResponseText之前调用WaitForResponse方法以确保获取的是完整的响应。
  代码:
  // Send the HTTP request.
  WinHttpReq.Send();
  // Wait for the entire response.
  WinHttpReq.WaitForResponse();
  // Retrieve the response text.
  strResult = WinHttpReq.ResponseText;
  ********************************************************************************************************************************************
  AJAX(狭义)不用这个组件。
  补充一个应用例子:显示Http连接过程
  将以下代码保存为 httpConnect.wsf
  代码:
  
  
  
  var HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0;
  var login = "admin";
  var passw = "admin";
  var targURL = "http://bbs.veryhman.com";
  var method = "GET";
  http.Open(method, targURL);
  var Done = false;
  var LastStatus=0;
  do
  {
  http.Send();
  var Status = http.Status;
  switch (Status)
  {
  case 200:
  Done = true;
  break;
  case 401:
  p("Requires Server UserName and Password.");
  http.Open(method, targURL, false);
  http.SetCredentials(login, passw,
  HTTPREQUEST_SETCREDENTIALS_FOR_SERVER);
  if (LastStatus == 401)
  Done = true;
  break;
  default:
  p("Unexpected Status: " + Status);
  Done = true;
  break;
  }
  LastStatus = Status;
  } while (!Done);
  p(http.GetAllResponseHeaders());
  function p(s){WScript.Echo(s)}
  function http::OnError(ErrorNumber, ErrorDescription) {p("ErrorNumber: "+ErrorNumber);p("ErrorDescription: "+ErrorDescription)}
  function http::OnResponseDataAvailable(Data) {p(Data.join("\n"))}
  function http::OnResponseFinished() {p("Response Finished.")}
  function http::OnResponseStart(Status, ContentType) {p("Status: "+Status);p("ContentType: "+ContentType)}
  
  
  在cmd命令行里运行
  cscript httpConnect.wsf
  *************************************************************************************************************************************
  Use Winhttp.winhttprequest To Download Files From A Remote Web Server To A Local Mirror Site... ( Vbscript )
  Author: Martin77
  Description:
  A script that downloads files from a remote web server to a local mirror site (you can use it for just downloading files to anywhere you want...)
  Script:
  '*************************************************************************************************
  ' Download.vbs - Download files from the internet to local mirror servers
  ' Created by Martin77 (version 1.0)
  '*************************************************************************************************
  Option Explicit
  On Error Resume Next
  Dim LogPath, SourceURL, TargetPath, Files2Download
  '*************************************************************************************************
  ' Edit these variables only!
  '*************************************************************************************************
  'Where to save the log file:
  LogPath = "C:\Inetpub\wwwroot\Logs\"
  'From where download the files:
  SourceURL = "http://www.somesite.com/rootfolder/otherfolder/"
  'Where to save the downloaded files:
  TargetPath = "C:\Inetpub\wwwroot\LocalSite\"
  'What files to download (separated by ','):
  Files2Download = "file1.txt,file2.exe,file3.zip"
  '*************************************************************************************************
  Main 'Run the main process
  '*************************************************************************************************
  'Main process:
  Sub Main
  Dim strOutputFile, strErrCode, strOutPut, i
  Dim objArgs, objFSO, objOutputFile, objHTTP
  Dim arrFiles2Download
  Const ForReading = 1, ForWriting = 2, ForAppending = 8
  arrFiles2Download = Split(Files2Download,",")
  strOutputFile = LogPath & "Download-Log-" & Replace(Date,"/","-") & ".log"
  'Parse Arguments (from App. Center URL Health Monitor):
  Set objArgs = Wscript.Arguments
  For i = 0 To objArgs.count - 1
  strErrCode = strErrCode & objArgs(i) & " "
  Next
  Set objArgs = Nothing
  strOutPut = Now & " - " & strErrCode
  'Download files:
  For i = 0 To Ubound(arrFiles2Download)
  If SaveWebBinary(SourceURL & arrFiles2Download(i), TargetPath & arrFiles2Download(i)) Then
  'Download OK:
  strOutPut = strOutPut & vbCrLf & Now & " - Downloaded file: " & arrFiles2Download(i)
  Else
  'Download Error
  strOutPut = strOutPut & vbCrLf & Now & " - Error downloading file: " & arrFiles2Download(i)
  End If
  Next
  'Write LogFile:
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objOutputFile = objFSO.OpenTextFile(strOutputFile, ForAppending, True)
  objOutputFile.Write "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" & vbCrLf
  objOutputFile.Write strOutPut & vbCrLf
  objOutputFile.Write "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" & vbCrLf
  objOutputFile.Close
  Set objFSO = Nothing
  Set objOutputFile = Nothing
  End Sub
  '*************************************************************************************************
  'Download the file from %strUrl% to %strFile% - returns True / False
  Function SaveWebBinary(strUrl, strFile) 'As Boolean
  Const adTypeBinary = 1
  Const adSaveCreateOverWrite = 2
  Const ForWriting = 2
  Dim web, varByteArray, strData, strBuffer, lngCounter, ado
  Err.Clear
  Set web = Nothing
  Set web = CreateObject("WinHttp.WinHttpRequest.5.1")
  If web Is Nothing Then Set web = CreateObject("WinHttp.WinHttpRequest")
  If web Is Nothing Then Set web = CreateObject("MSXML2.ServerXMLHTTP")
  If web Is Nothing Then Set web = CreateObject("Microsoft.XMLHTTP")
  web.Open "GET", strURL, False
  web.Send
  If Err.Number 0 Then
  SaveWebBinary = False
  Set web = Nothing
  Exit Function
  End If
  If web.Status "200" Then
  SaveWebBinary = False
  Set web = Nothing
  Exit Function
  End If
  varByteArray = web.ResponseBody
  Set web = Nothing
  'Save the file
  On Error Resume Next
  Set ado = Nothing
  Set ado = CreateObject("ADODB.Stream")
  If ado Is Nothing Then
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set ts = fs.OpenTextFile(strFile, ForWriting, True)
  strData = ""
  strBuffer = ""
  For lngCounter = 0 to UBound(varByteArray)
  ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1)))
  Next
  ts.Close
  Else
  ado.Type = adTypeBinary
  ado.Open
  ado.Write varByteArray
  ado.SaveToFile strFile, adSaveCreateOverWrite
  ado.Close
  End If
  SaveWebBinary = True
  End Function
  '*************************************************************************************************
  http://bbs.blueidea.com/thread-2818063-1-1.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值