用下面的代码下载网页:
Dim XMLObject As XMLHTTP
Set XMLObject = CreateObject("Microsoft.XMLHTTP")
XMLObject.open "GET", "http://hi.baidu.com/jiajiadn2", False
XMLObject.send
Text1.Text = XMLObject.responseText出现了两个奇怪的问题:
1、不知道为什么我用下面的代码访问内容长的网页,比如http://hi.baidu.com/jiajiadn2,得到的内容似乎总不能完全?
2、还有同样的GB2312编码的网页,这个http://www.yuneach.com网页取过来的变成了乱码,而上面那个网页的却能看到汉字?

解决方案 »

  1.   

    1,会不会是XMLHTTP访问时有意设的时间限制
      

  2.   

    SORRY,应该是这样的:整数,用来指定在 TextBox 控件中能够输入的最大字符数。MaxLength 属性的缺省值为 0,指出对于用户系统上单行 TextBox 控件来说,最大值不能超过被内存强制建立的值,并且对于多行 TextBox 控件而言,最大值大约为 32K。任何大于 0 的数表示字符数的最大值。Option ExplicitPrivate Sub Command1_Click()
        testGet
    End SubPrivate Sub testGet()
    Dim XMLObject As XMLHTTP
    Dim strGet As String
    Set XMLObject = CreateObject("Microsoft.XMLHTTP")
    XMLObject.open "GET", "http://hi.baidu.com/jiajiadn2", False
    XMLObject.send
    strGet = XMLObject.responseText
    Debug.Print Right$(strGet, 100) '看得到是由</html>结尾的
    Text1.Text = strGet
    RichTextBox1.Text = strGet  '看到完整的页面了吧
    Debug.Print Text1.MaxLength
    End SubPrivate Sub Form_Load()
        Text1.MaxLength = 100000    '会报错,虽然MaxLength的定义是long型
    End Sub
      

  3.   

    2,那个某人手工打造的网页不合规范,造成XMLHTTP没有把他识别成GB2312编码:
    看看后面的代码和输出就明白了,后一个在HTTP头里没有charset=GB2312,且网页内容中的title元素竟然放到说明文件编码格式的重要的http-equiv="Content-Language"型的META元素前面去了,难怪啊难怪!识别出来也算是浏览器的纠错性能好:)
    Option ExplicitPrivate Sub Command1_Click()
        testGet
    End SubPrivate Sub testGet()
        Dim XMLObject As XMLHTTP
        Dim strGet As String, strurl As String
        strurl = "http://hi.baidu.com/jiajiadn2"
        Debug.Print "testGet:" & strurl
        Set XMLObject = CreateObject("Microsoft.XMLHTTP")
        XMLObject.open "GET", strurl, False
        XMLObject.send
        Debug.Print XMLObject.getAllResponseHeaders
        strGet = XMLObject.responseText
        Debug.Print "网页内容:"
        Debug.Print Left$(strGet, 200)
        'Debug.Print Right$(strGet, 100) '看得到是由</html>结尾的
        'Text1.Text = strGet
        RichTextBox1.Text = strGet  '看到完整的页面了吧
        'Debug.Print Text1.MaxLength
    End SubPrivate Sub Command2_Click()
        testGet2End SubPrivate Sub Form_Load()
    '    Text1.MaxLength = 100000    '会报错,虽然MaxLength的定义是long型
    End Sub
    Private Sub testGet2()
        Dim XMLObject As XMLHTTP
        Dim strGet As String, strurl As String
        strurl = "http://www.yuneach.com"
        Debug.Print "testGet2:" & strurl
        Set XMLObject = CreateObject("Microsoft.XMLHTTP")
        XMLObject.open "GET", strurl, False
        XMLObject.send
        Debug.Print XMLObject.getAllResponseHeaders
        'strGet = XMLObject.responseText
        strGet = StrConv(XMLObject.responseBody, vbUnicode) '经由GB2312转为UNICODE显示正常
        Debug.Print "网页内容:"
        Debug.Print Left$(strGet, 200)
        RichTextBox1.Text = strGet  '看到完整的页面了吧
    End Sub输出:
    testGet:http://hi.baidu.com/jiajiadn2
    Content-Type: text/html; charset=GB2312
    Content-Length: 81347
    网页内容:
    <!--STATUS OK-->
    <html><head><meta http-equiv=content-type content="text/html; charset=gb2312">
    <link rel="alternate" type="application/rss+xml" title="订阅该空间的博客文章"  href="http://hi.baidu.com/jiajiadtestGet2:http://www.yuneach.com
    Content-Length: 10790
    Content-Type: text/html
    X-Powered-By: PleskWin
    X-Powered-By: ASP.NET
    网页内容:<HTML>
        <HEAD>
            <title>普洱茶 三生缘 三生缘普洱茶 普洱小挂件|普洱工艺品</title>
            <meta http-equiv="Content-Language" content="zh-cn">
            <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
            <meta