Teacher.NET

To Be Continued.......
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

运用HttpWebRequest与HttpWebResponse获取Web页数据

Posted on 2007-04-19 09:14  Teacher-NET  阅读(3654)  评论(4编辑  收藏  举报
  • HttpWebRequest
      HttpWebRequest 类对 WebRequest 中定义的属性和方法提供支持,也对使用户能够直接与使用 HTTP 的服务器交互的附加属性和方法提供支持。
      使用 System.Net.WebRequest.Create 方法初始化新的 HttpWebRequest 对象。如果统一资源标识符 (URI) 的方案是 http://https://,则 Create 返回 HttpWebRequest 对象。
      GetResponse 方法向 RequestUri 属性中指定的资源发出同步请求并返回包含该响应的 HttpWebResponse。可以使用 BeginGetResponseEndGetResponse 方法对资源发出异步请求。
      当要向资源发送数据时,GetRequestStream 方法返回用于发送数据的 Stream 对象。BeginGetRequestStreamEndGetRequestStream 方法提供对发送数据流的异步访问。
      对于使用 HttpWebRequest 的客户端验证身份,客户端证书必须安装在当前用户的“我的证书”存储区中。
      如果在访问资源时发生错误,则 HttpWebRequest 类将引发 WebExceptionWebException.Status 属性包含指示错误源的 WebExceptionStatus 值。当 WebException.StatusWebExceptionStatus.ProtocolError 时,Response 属性包含从资源接收的 HttpWebResponse
      HttpWebRequest
    将发送到 Internet 资源的公共 HTTP 标头值公开为属性,由方法或系统设置;下表包含完整列表。可以将 Headers 属性中的其他标头设置为名称/值对。注意,服务器和缓存在请求期间可能会更改或添加标头。

 

  • HttpWebResponse
      此类包含对 WebResponse 类中的属性和方法的 HTTP 特定用法的支持。HttpWebResponse 类用于生成发送 HTTP 请求和接收 HTTP 响应的 HTTP 独立客户端应用程序。
      决不要直接创建 HttpWebResponse 类的实例。而应当使用通过调用 HttpWebRequest.GetResponse 所返回的实例。您必须调用 Stream.Close 方法或 HttpWebResponse.Close 方法来关闭响应并将连接释放出来供重用。不必同时调用 Stream.CloseHttpWebResponse.Close,但这样做不会导致错误。
      从 Internet 资源返回的公共标头信息公开为该类的属性。有关完整的列表,请参见下表。可以从 Headers 属性以名称/值对的形式读取其他标头。





关键代码:

Imports System.Net
Imports System.IO
Imports System.Text.RegularExpressions
Partial 
Class Default4
    
Inherits System.Web.UI.Page
    
'获取Web页上的数据
    Protected Sub btn_GetResponse_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles btn_GetResponse.Click
        
Dim strURL As String = String.Empty
        
Dim strResult As String = String.Empty
        
Dim hwr As HttpWebRequest = Nothing
        
Dim hws As HttpWebResponse = Nothing
        
If Me.CheckURL(Me.txtURL.Text, strURL) Then
            hwr 
= HttpWebRequest.Create(strURL)
            hwr.Method 
= "Get"
            hws 
= hwr.GetResponse
            
'为避免乱码,对数据流进行了gb2312编码
            Using sr As StreamReader = New StreamReader(hws.GetResponseStream, Encoding.GetEncoding("gb2312"))
                
Me.txtResult.Text = sr.ReadToEnd.Trim
            
End Using
        
Else
            
Me.Label_CheckedResult.Text = "无效的URL"
        
End If
    
End Sub


    
'该例程主要是用来匹配输入的URL是否符合标准
    Private Function CheckURL(ByVal url As StringByRef URLReturnValue As StringAs Boolean
        
If Regex.IsMatch(url.Trim, "http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"Then
            URLReturnValue 
= url.Trim
            
Return True
        
Else
            URLReturnValue 
= String.Empty
            
Return False
        
End If
    
End Function


    
'该例程主要检查输入的URL指向的站点是否可用
    Protected Sub btn_CheckURLActive_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles btn_CheckURLActive.Click
        
Dim strURL As String = String.Empty
        
Dim strResult As String = String.Empty
        
Dim hwr As HttpWebRequest = Nothing
        
Dim hws As HttpWebResponse = Nothing
        
If Me.CheckURL(Me.txtURL.Text, strURL) Then
            
Try
                hwr 
= HttpWebRequest.Create(strURL)
                hwr.Method 
= "HEAD"
                hwr.Timeout 
= 100
                hws 
= hwr.GetResponse
                
If hws.StatusCode = HttpStatusCode.OK Then
                    
Me.Label_CheckedResult.Text = "您输入的URL可以用"
                    
Me.btn_GetResponse.Enabled = True
                
Else
                    
Me.Label_CheckedResult.Text = "您输入的URL不可用"
                    
Me.btn_GetResponse.Enabled = False
                
End If
            
Catch ex As Exception
                
Me.Label_CheckedResult.Text = "发生错误,信息如下:" & ex.Message
            
End Try
        
Else
            
Me.Label_CheckedResult.Text = "无效的URL"
        
End If
    
End Sub

End Class