📄 httpproc.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 + -