笔记4:HttpWebRequest 与 HttpWebResponse 类
网页的请求与响应均通过HTTP来完成,HTTP是Web最重要的基础核心。 Server:Microsoft-IIS/5.0 Content-Location:http://www.nantay.com.tw/Default.htm Date: Sun,02 Nov 2003 16:37:09 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Sat,30 Aug 2003 09:03:22 GMT ETag: "50f5f90d56ec31:da0 Content-Length: 5985 一个客户端的HTTP请求标题主要由几个连续的字符串消息列组成,每一列开头的关键词代表一种特定的消息种类,紧接着冒号连接其相关信息,比较重要的信息项目如: Referer: 标记客户端上一次浏览过的网页URI,建立网页快取机制,方便整理捜寻重新浏览过的网页。 User-Agent: 提供服务器端当前客户端所使用的系统平台、软件版本,这个信息可以让服务器端针对特定用户端,提供所需的服务。 Accept: 代表客户端计算机当前所支持的MIME格式类型,每种类型以一个斜线链接主类与子类,若是其类表示式为“*/*”,表示客户端接收任何类的MIME格式。 Content-Type: 表示响应的数据格式,此例为text/html。 Server: 表示服务器的系统平台,此例为“Microsoft-IIS/5.0”。 Date: 消息建立的时间。
二、使用 HttpWebRequest 与 HttpWebResponse HttpWebRequest与HttpWebResponse分别衍生自 WebRequest 及WebResponse这两个抽象基类。 使用方法同前面一样: 首先引用WebRequest类Create()方法,建立一个WebRequest对象,传入HTTP协议的URI标头,接下来将其形成HttpWebRequest类的对象,再利用此HttpWebRequest对象,便可取得所需的数据流及服务器返回的网页内容。 HttpWebRequest对象引用GetResponse()方法,返回HttpWebResponse对象,再由GetResponseStream方法,取得包含HTTP响应消息的数据流,解析其中的字节数据,就从中将整个网页数据一一取出。
三、解析网页 Imports System.Net Public Class Form1 Private Sub btnGet_Click(sender As Object,e As EventArgs) Handles btnGet.Click Dim hwq As HttpWebRequest Dim hwp As HttpWebResponse Dim colHeader As WebHeaderCollection hwq = CType(HttpWebRequest.Create(txtAddress.Text),HttpWebRequest) '创建对象 hwp = hwq.GetResponse colHeader = hwp.Headers '取得响应头 txtHeader.Text = colHeader.ToString txtOther.Text = "获取最后修改时间: " & hwp.LastModified.ToString & vbCrLf & "获取响应的方法: " & hwp.Method.ToString & vbCrLf & "获取响应的http版本: " & hwp.ProtocolVersion.ToString & vbCrLf & "获取响应的原始地址: " & hwp.ResponseUri.ToString & vbCrLf & "获取响应的服务器名称:" & hwp.Server.ToString & vbCrLf & "获取是否支持标题的值:" & hwp.SupportsHeaders.ToString End Sub End Class
四、参数传递
五、举例 找了半天,没找到同时支持Get与Post两种方法的网页,无奈各选一个网址来测试。 1、Get方法使用http://www.silukee.com/小说网上的搜索(因为这里找到了method=”get”),搜索的关键源代码如下: <form name="ssform" method="get" action="http://www.silukee.com/SearchBook.aspx" onsubmit="if(keyword.value=='' || keyword.value=='请输入小说或作者名称'){alert('请输入小说或作者名称,别输错别字哦:)');return false;}"> <div class="inp"> <span><input name="keyword" type="text" size="22" maxlength="30" value="请输入书名、作者" title="请正确输入" onfocus="this.style.color = '#000000';this.focus();if(this.value=='请输入书名、作者'){this.value='';}" onblur="if(this.value==''){this.value='请输入书名、作者';}" ondblclick="javascript:this.value=''"/></span><span><input class="bn-srh" type="submit" value="搜索" title="搜索"/><input type="hidden" name="t" value="1"/></span> 关键的有http://www.silukee.com/SearchBook.aspx,域值keyword和t,组成的搜索页为: http://www.silukee.com/SearchBook.aspx?keyword=23&t=1
2、Post方法使用http://www.999wx.com/user/login.aspx上的登录,这里找到了method=”POST”,登录的关键代码: <form action="/User/LoginCheck.aspx" method="post" name="LoginFrom"> <div class="loginbox1"> <span>通行证账号:</span> <input type="text" name="username" id="username" size="22" class="text user" tabindex="1"/> <div class="spline"></div> <span>通行证密码:</span> <input type="password" name="password" id="password" size="22" class="text pass" tabindex="2"/> <div class="spline"></div> <label><input type="checkbox" value="30" name="CookieTime" checked/>自动登录</label> <label class="forget"><a href="/user/ForgetPass.aspx">找回密码</a></label> <div class="spline"></div> <input type="submit" class="submit" name="UserLogin" value="登录"/> <input type="button" class="submit" onclick="window.open('/user/RegtersSave.aspx','','')" name="regedit" value="注册"/> </div> </form>
1、get时的情况:
2、POST的情况:
代码如下: Imports System.Net Imports System.IO Imports System.Text Public Class Form1 Private Sub btnGet_Click(sender As Object,e As EventArgs) Handles btnGet.Click 'Get方式 Dim hwq As HttpWebRequest Dim hwp As HttpWebResponse Dim sr As StreamReader Dim strAddress As String strAddress = txtGetAddress.Text & "?" & "keyword=66&t=1" Try hwq = CType(HttpWebRequest.Create(strAddress),HttpWebRequest) 'hwq.Method = "GET" 默认为Get,所以不用设置 hwp = CType(hwq.GetResponse,HttpWebResponse) sr = New StreamReader(hwp.GetResponseStream) txtContent.Text = sr.ReadToEnd sr.Close() Catch ex As Exception txtContent.Text = ex.Message End Try End Sub Private Sub btnPost_Click(sender As Object,e As EventArgs) Handles btnPost.Click 'Post方式 Dim hwq As HttpWebRequest Dim hwp As HttpWebResponse Dim st As Stream Dim sr As StreamReader '从响应流中得到数据 Dim strPostInfo As String Dim a() As Byte strPostInfo = "username=getpost&password=get123456" a = Encoding.ASCII.GetBytes(strPostInfo) '转为字节流,以便注入请求流中(请求流不能出现=) Try hwq = CType(HttpWebRequest.Create(txtPostAddress.Text),HttpWebRequest) 'post信息 hwq.Method = "POST" hwq.ContentLength = a.Length hwq.ContentType = "application/x-www-form-urlencoded" hwq.Referer = "http://www.999wx.com/user/login.aspx" '请求前网址,此句不能省 st = hwq.GetRequestStream st.Write(a,a.Length) '注入post信息 hwp = CType(hwq.GetResponse,HttpWebResponse) sr = New StreamReader(hwp.GetResponseStream,Encoding.Default) txtContent.Text = sr.ReadToEnd sr.Close() Catch ex As Exception txtContent.Text = ex.Message End Try End Sub End Class (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |