⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpproc.vb

📁 CSDN V3.0 使用VB。Net开发 可以使用该助手访问CSDN
💻 VB
字号:
Imports System.Net
Imports System.Text
Imports System.IO

Namespace comm


    Public Class HttpProc

        Private _cookieGet As CookieCollection
        Private _cookiePost As CookieCollection
        Private _encoding As Encoding = System.Text.Encoding.Default
        Private _Proxy As IWebProxy
        Private _ResHtml As String
        Private _strCode As String
        Private _strErr As String
        Private _strPostdata As String
        Private _strRefUrl As String = "http://community.csdn.net/LOVE_CSDN"
        Private _strUrl As String
        Private _StrUserAnget As String = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)"

        ''' <summary>
        ''' 获取或者设置使用的UserAgent
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>默认模拟Win2003平台、Ie6.0、.net CLR 1.1 </remarks>
        Public Property UserAgent() As String
            Get
                Return _StrUserAnget
            End Get
            Set(ByVal value As String)
                _StrUserAnget = value
            End Set
        End Property


        ''' <summary>
        ''' 获取或者设置当前要请求的地址
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property strUrl() As String
            Get
                Return Me._strUrl
            End Get
            Set(ByVal value As String)
                Me._strUrl = value
            End Set
        End Property

        ''' <summary>
        ''' 获取或者设置发送时模拟的来源地址
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>该属性应用在Http请求中的Referer标头</remarks>
        Public Property strRefUrl() As String
            Get
                Return Me._strRefUrl
            End Get
            Set(ByVal value As String)
                Me._strRefUrl = value
            End Set
        End Property

        ''' <summary>
        ''' 获取或者设置要发送的数据
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>以Post方式发送的数据</remarks>
        Public Property strPostdata() As String
            Get
                Return Me._strPostdata
            End Get
            Set(ByVal value As String)
                Me._strPostdata = value
            End Set
        End Property

        ''' <summary>
        ''' 处理碰到的错误
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property strErr() As String
            Get
                Return Me._strErr
            End Get
            Set(ByVal value As String)
                Me._strErr = value
            End Set
        End Property

        ''' <summary>
        ''' 获取得到的Http响应码
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property strCode() As String
            Get
                Return Me._strCode
            End Get
        End Property

        ''' <summary>
        ''' 获取响应的Http数据
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ResHtml() As String
            Get
                Return Me._ResHtml
            End Get
        End Property


        ''' <summary>
        ''' 设置Http请求和响应中使用的编码
        ''' </summary>
        ''' <value></value>
        ''' <remarks></remarks>
        Public Property encoding() As Encoding
            Get
                Return Me._encoding
            End Get
            Set(ByVal value As Encoding)
                Me._encoding = value
            End Set
        End Property

        ''' <summary>
        ''' 获取或者设置要发送的Cookie
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property cookiePost() As CookieCollection
            Get
                Return Me._cookiePost
            End Get
            Set(ByVal value As CookieCollection)
                Me._cookiePost = value
            End Set
        End Property

        ''' <summary>
        ''' 获取响应中的Cookie
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property cookieGet() As CookieCollection
            Get
                Return Me._cookieGet
            End Get
        End Property

        ''' <summary>
        ''' 处理Get和Post请求,得到相应
        ''' </summary>
        ''' <returns></returns>
        ''' <remarks>在设置好各个属性以后调用该方法;该方法只是简单的同步读取;该方法只考虑到Http响应的结果为文本</remarks>
        Public Function Proc() As String
            '请求
            Dim HttRequest As HttpWebRequest = Nothing
            '响应
            Dim HttpResponse As HttpWebResponse = Nothing
            Dim sr As StreamReader = Nothing
            Try
                '从属性中创建Http请求
                HttRequest = Me.CreateRequest
                '从请求中创建响应
                HttpResponse = CType(HttRequest.GetResponse, HttpWebResponse)
                sr = New StreamReader(HttpResponse.GetResponseStream, Me.encoding)
                '直接读到结尾
                Me._ResHtml = sr.ReadToEnd
                '获取状态码
                Me._strCode = HttpResponse.StatusCode.ToString
                '如果状态码是302的话,设置返回的结果为新的地址
                If (Me._strCode Is "302") Then
                    Me._ResHtml = HttpResponse.Headers.Item("location")
                End If
                '如果有Cookie的话
                '就获取Cookie
                If HttpResponse.Cookies.Count > 0 Then
                    Me._cookieGet = HttpResponse.Cookies
                End If

            Catch ex As Exception
                '错误
                Me._strErr = ex.Message
                _ResHtml = ""
            Finally
                '释放资源
                If Not sr Is Nothing Then
                    sr.Close()
                    sr = Nothing
                End If
                If Not HttpResponse Is Nothing Then
                    HttpResponse.Close()
                    HttpResponse = Nothing
                End If
                If Not HttRequest Is Nothing Then
                    HttRequest = Nothing
                End If
            End Try

            Return Me.ResHtml
        End Function


        Public Function CreateRequest() As HttpWebRequest
            Dim HttpRequest As HttpWebRequest = Nothing
            HttpRequest = WebRequest.Create(Me._strUrl)
            HttpRequest.Accept = "*/*"
            HttpRequest.UserAgent = UserAgent
            HttpRequest.CookieContainer = New CookieContainer
            HttpRequest.Referer = Me.strRefUrl
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            '开始处理代理
            Dim proxy As New WebProxy
            If My.Settings.Proxy_DEF Then
                proxy.Address = New Uri(String.Format("http://{0}:{1}", My.Settings.Proxy_Server, My.Settings.Proxy_Port))
                If My.Settings.Proxy_Username.Length > 0 And My.Settings.Proxy_Pass.Length > 0 Then
                    proxy.Credentials = New NetworkCredential(My.Settings.Proxy_Username, My.Settings.Proxy_Pass)
                End If
                HttpRequest.Proxy = proxy
            End If

            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            ' 处理Cookie
            If (Not Me._cookiePost Is Nothing) Then
                Dim u As New Uri(Me._strUrl)
                For Each c As Cookie In Me._cookiePost
                    c.Domain = u.Host
                Next
                HttpRequest.CookieContainer.Add(Me._cookiePost)
            End If


            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            '处理要发送的数据
            If Len(Me._strPostdata) > 0 Then
                '如果要发送的数据长度大于0,就以Post方式发送
                HttpRequest.ContentType = "application/x-www-form-urlencoded"
                HttpRequest.Method = "POST"
                Dim buf As Byte() = Me._encoding.GetBytes(Me._strPostdata)
                HttpRequest.ContentLength = buf.Length
                Dim stream As Stream = Nothing
                Try
                    stream = HttpRequest.GetRequestStream
                    stream.Write(buf, 0, buf.Length)
                Catch exception1 As Exception
                    Me._strErr = exception1.Message
                Finally
                    If (Not stream Is Nothing) Then
                        stream.Close()
                    End If
                End Try
            End If

            Return HttpRequest
        End Function

        ''' <summary>
        ''' 构造函数
        ''' </summary>
        ''' <param name="strHttpUrl">发送的地址</param>
        ''' <param name="StrHttpPostData">发送的数据</param>
        ''' <param name="cookiePosted">发送数据的时候使用的cookie</param>
        ''' <remarks>此方法用于以Post方式并附带cookie的发送数据</remarks>
        Public Sub New(ByVal strHttpUrl As String, ByVal StrHttpPostData As String, ByVal cookiePosted As CookieCollection)
            Me._strUrl = strHttpUrl
            Me._strPostdata = StrHttpPostData
            Me._cookiePost = cookiePosted
        End Sub

        ''' <summary>
        ''' 构造函数
        ''' </summary>
        ''' <param name="strHttpUrl">发送的地址</param>
        ''' <param name="StrHttpPostData">发送的数据</param>
        ''' <remarks>此方法用于以Post方式的发送数据</remarks>
        Public Sub New(ByVal strHttpUrl As String, ByVal StrHttpPostData As String)
            Me._strUrl = strHttpUrl
            Me._strPostdata = StrHttpPostData
        End Sub

        ''' <summary>
        ''' 构造函数
        ''' </summary>
        ''' <param name="strHttpUrl">发送的地址</param>
        ''' <param name="cookiePosted">发送数据的时候使用的cookie</param>
        ''' <remarks>此方法用于以GET方式并附带cookie的请求数据</remarks>
        Public Sub New(ByVal strHttpUrl As String, ByVal cookiePosted As CookieCollection)
            Me._strUrl = strHttpUrl
            Me._cookiePost = cookiePosted
        End Sub

        ''' <summary>
        ''' 构造函数
        ''' </summary>
        ''' <param name="strHttpUrl">发送的地址</param>
        ''' <remarks>此方法用于以GET方式请求数据</remarks>
        Public Sub New(ByVal strHttpUrl As String)
            Me._strUrl = strHttpUrl
        End Sub


        Public Sub New()
            Me._encoding = System.Text.Encoding.Default
        End Sub

    End Class

End Namespace

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -