zoukankan      html  css  js  c++  java
  • 用来获取网页的类

    最后更新时间:2005年9月7日
    更新了HttpDriver类

    这个经过测试,使用上比较稳定,因为考虑到统一的错误处理,类里面没有catch任何错误,所有网络错误都在使用的时候捕获,以便决定重试或终止。支持get和post,支持自定义编码,支持cookie,但不支持上传文件。

    Imports System.Net
    Imports System.IO

    Public Class HttpDriver

        
    Public Function GetPage(ByVal url As StringOptional ByRef postPara As String = ""Optional ByRef encType As String = "GB2312"As String
            
    Return GetPage(url, postPara, NothingFalse, encType)
        
    End Function


        
    Public Function GetPage(ByVal url As StringByRef postPara As System.Collections.Hashtable, Optional ByRef encType As String = "GB2312"As String
            
    Return GetPage(url, ColToStr(postPara), encType)
        
    End Function


        
    Public Function GetPage(ByVal url As StringByRef postPara As StringByRef cookies As CookieCollection, ByVal hasCookie As BooleanOptional ByRef encType As String = "GB2312"Optional ByRef refer As String = ""As String
            
    If (url.StartsWith("http://"= FalseThen
                url 
    = "http://" & url
            
    End If
            
    Dim hRqst As HttpWebRequest = HttpWebRequest.Create(url)
            
    If (hasCookie = True AndAlso (Not cookies Is Nothing)) Then
                hRqst.CookieContainer 
    = New CookieContainer
                hRqst.CookieContainer.Add(cookies)
            
    End If

            hRqst.ContentType 
    = "application/x-www-form-urlencoded"
            hRqst.Headers.Add("Accept-Language""zh-cn")
            
    Dim streamData As Stream
            
    Dim bt() As Byte
            
    If (postPara = ""Then
                hRqst.Method 
    = "GET"
            Else
                hRqst.Method 
    = "POST"
                hRqst.AllowWriteStreamBuffering = True
                bt 
    = System.Text.Encoding.ASCII.GetBytes(postPara)
                hRqst.ContentLength 
    = bt.Length
                hRqst.UserAgent 
    = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
                hRqst.Referer = refer
                hRqst.KeepAlive 
    = False
                hRqst.Timeout 
    = 20000
                streamData 
    = hRqst.GetRequestStream()
                streamData.
    Write(bt, 0, bt.Length)
                streamData.Close()
            
    End If
            
    Dim hRsp As HttpWebResponse
            hRsp 
    = hRqst.GetResponse()
            streamData 
    = hRsp.GetResponseStream()
            
    If (hasCookie = True AndAlso (Not hRsp.Cookies Is Nothing)) Then
                cookies.Add(hRsp.Cookies)
            End If

            
    If (encType = ""Then
                encType 
    = "GB2312"
            End If
            
    Dim readStream As New IO.StreamReader(streamData, System.Text.Encoding.GetEncoding(encType))
            GetPage 
    = readStream.ReadToEnd()
            streamData.Close()
        
    End Function


        
    Public Function GetPage(ByVal url As StringByRef postPara As System.Collections.Hashtable, ByRef cookies As CookieCollection, ByVal hasCookie As BooleanOptional ByRef encType As String = "GB2312"As String
            
    Return GetPage(url, ColToStr(postPara), cookies, True, encType)
        
    End Function


        
    Public Function GetPage(ByVal url As StringByRef cookies As CookieCollection, ByVal hasCookie As BooleanOptional ByRef encType As String = "GB2312"As String
            
    Return GetPage(url, "", cookies, True, encType)
        
    End Function


        
    '该函数用于转换表单项集合为字符串
        Public Shared Function ColToStr(ByRef ht As System.Collections.Hashtable, Optional ByRef encType As String = "GB2312"As String
            
    Dim str As String
            
    Dim para As DictionaryEntry
            
    For Each para In ht
                
    str &= System.Web.HttpUtility.UrlEncode(CType(para.Key, String), Text.Encoding.GetEncoding(encType))
                
    str &= "="
                str &= System.Web.HttpUtility.UrlEncode(CType(para.Value, String), Text.Encoding.GetEncoding(encType))
                
    str &= "&"
            Next
            
    str = str.Substring(0str.Length - 1)
            
    Return str
        
    End Function


    End Class



    如果需要支持cookie,并支持refer,可以通过下面这个类来使用上面的httpdriver。

    '该类用于访问含有cookie的页面
    Imports System.IO

    Public Class UserAgent
        
    Private m_cookies As New System.Net.CookieCollection
        
    Private refer As String
        
    Private hd As New HttpDriver

        
    Public Function GetPage(ByVal url As StringOptional ByRef postPara As String = ""Optional ByRef encType As String = "GB2312"As String
            GetPage 
    = hd.GetPage(url, postPara, m_cookies, True, encType, refer)
            refer 
    = url
        
    End Function


        
    Public Function GetPage(ByVal url As StringByRef postPara As Hashtable, Optional ByRef encType As String = "GB2312"As String
            
    Return GetPage(url, hd.ColToStr(postPara), encType)
        
    End Function


        
    Public Function SetCookie(ByVal cookies As System.Net.CookieCollection)
            m_cookies 
    = cookies
        
    End Function


        
    Public Function GetCookie() As System.Net.CookieCollection
            
    Return m_cookies
        
    End Function

    End Class



    轻量的get网页的函数

    Public Function GetPage(ByVal url As StringAs String
        
    Dim hRqst As HttpWebRequest = HttpWebRequest.Create(url)

        hRqst.ContentType 
    = "application/x-www-form-urlencoded"
        hRqst.Method = "GET"
        Dim streamData As Stream

        
    Dim hRsp As HttpWebResponse = hRqst.GetResponse()
        streamData 
    = hRsp.GetResponseStream()

        
    Dim readStream As New IO.StreamReader(streamData, System.Text.Encoding.GetEncoding("GB2312"))
        GetPage 
    = readStream.ReadToEnd()
        streamData.Close()
    End Function


    Get方法:

    Dim ua as New UserAgent
    Dim content as String
    Dim url as String
    url 
    = "www.sina.com.cn"
    content = ua.GetPage(url)
       url = "sohu.com"
    content = ua.GetPage(url)


    Post方法(页面和参数名字都是示例)。UserAgent的好处是可以透明的保存cookie,用以下的方法就可以实现登录后保存登录信息了。

    Dim ua as New UserAgent
    Dim content as String
    Dim url as String
    Dim ht as New HashTable

    url 
    = "mail.sina.com.cn"
    ht.Add("username""用户名")
    ht.Add(
    "password""密码")
    content 
    = ua.GetPage(url, ht)
       url = "mail.sina.com.cn/default.htm"
       content = ua.GetPage(url)


    欢迎大家批评、补充、指正。

    ---------------------------

    http://www.cnblogs.com/squirrel_sc

    1. 如有引用,请包含本段文字及原始出处。以表示对作者的尊重,且能将有相似想法的人联系起来。

    2. 如无特殊说明,本文的文字代表作者的观点和想法。由于人类的记忆和连通性的限制,可能会将别人的观点和想法当成自己的(会尽量避免,但我读书少,别蒙我:D);或有人会有同样的想法(那就太好了)。若有此类情况,请联系我。我会很高兴更新内容。

    3. 每篇文章会根据反馈或新的想法,随时更新。我会尽量记得更新版本号。

  • 相关阅读:
    oracle正装表达式匹配中文
    oracle利用循环批量检索对应的数据
    oracle不完全恢复
    informatica简易教程
    oracle创建用户的小问题
    宿主机sqlplus连接虚拟机oracle
    ETL采集原表语句生成
    Mac版 MicrosoftOffice2015 办公软件 破解教程
    BetterZip,支持rar等多种压缩解压方式(Xcode自身不能解压rar)
    Xcode --自动注释插件VVDocumenter-Xcode(配置须知)
  • 原文地址:https://www.cnblogs.com/squirrel_sc/p/46762.html
Copyright © 2011-2022 走看看