Msxml2.XMLHTTP 的几个严重问题

供新手入门和老手参考的教程和相关资料,包括中文帮助
tmplinshi
Posts: 1091
Joined: 01 Oct 2013, 14:57

Msxml2.XMLHTTP 的几个严重问题

19 Sep 2015, 08:46

Msxml2.XMLHTTP 的用法跟 WinHttp.WinHttpRequest.5.1 很相似,但是目前我发现了 3 个严重的问题:

  1. 不能重定向到不同的域名
    举例来说,http://alturl.com/it3jp 这个网址会重定向至 http://example.com/。而用 Msxml2.XMLHTTP 请求这个网址你既得不到返回的网页内容,也得不到返回的 HTTP 头部信息。

    Code: [Select all] [Download] GeSHi © Codebox Plus

    req := ComObjCreate("Msxml2.XMLHTTP")
    req.open("GET", "http://alturl.com/it3jp", False)
    req.Send()
    MsgBox, % req.responseText "`n" req.getAllResponseHeaders()
  2. 无法设置 Referer
    req.SetRequestHeader("Referer", "http://example.com/") 没有效果。
  3. 它会缓存网页内容。多次打开同一个网址,每次得到的结果都是跟第一次一样的。

    Code: [Select all] [Download] GeSHi © Codebox Plus

    req := ComObjCreate("Msxml2.XMLHTTP")
    Loop, 3 {
    req.open("GET", "http://tmplinshi.sinaapp.com/test/time.php", False)
    req.Send()
    MsgBox, % req.responseText ; 3次获取的时间都一样了
    }

    关于这个问题,我在谷歌里找到了两个解决方法。
    1. 给网址增加一个随机参数

      Code: [Select all] [Download] GeSHi © Codebox Plus

      req := ComObjCreate("Msxml2.XMLHTTP")
      Loop, 3 {
      r := ComObjCreate("Scriptlet.TypeLib").Guid
      req.open("GET", "http://tmplinshi.sinaapp.com/test/time.php?r=" r, False)
      req.Send()
      MsgBox, % req.responseText
      }
    2. 设置缓存的请求头

      Code: [Select all] [Download] GeSHi © Codebox Plus

      req := ComObjCreate("Msxml2.XMLHTTP")
      Loop, 3 {
      req.open("GET", "http://tmplinshi.sinaapp.com/test/time.php", False)
      req.SetRequestHeader("Pragma", "no-cache")
      req.SetRequestHeader("Cache-Control", "no-cache")
      req.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
      req.Send()
      MsgBox, % req.responseText
      }
arcticir
Posts: 471
Joined: 17 Nov 2013, 11:32

Re: Msxml2.XMLHTTP 的几个严重问题

19 Sep 2015, 10:55

它有什么优点,是WinHttpRequest.无法实现的呢?
tmplinshi
Posts: 1091
Joined: 01 Oct 2013, 14:57

Re: Msxml2.XMLHTTP 的几个严重问题

19 Sep 2015, 12:53

  • Msxml2.XMLHTTP 用的是 IE 浏览器的 cookie
  • 自动添加头字段Accept-Encoding: gzip, deflate,并能自动解压。

Return to “教程资料”

Who is online

Users browsing this forum: Yahoo [Bot] and 1 guest