笔记2:WebRequest 及 WebResponse 类介绍

笔记2:WebRequest 及 WebResponse 类介绍,第1张

概述一、WebRequest 及 WebResponse 类运行机制           WebRequest对象负责链接到远端服务器主机,并且将客户端的要求消息,传送到服务器;           WebResponse对象则封装服务器响应的消息内容,最后客户端通过WebResponse对象,取得其中的内容。             若仅是单纯地要求与响应 *** 作,只需进行链接动作,然后取得响应的Web


一、WebRequest 及 WebResponse 类运行机制

WebRequest对象负责链接到远端服务器主机,并且将客户端的要求消息,传送到服务器;

WebResponse对象则封装服务器响应的消息内容,最后客户端通过WebResponse对象,取得其中的内容。

若仅是单纯地要求与响应 *** 作,只需进行链接动作,然后取得响应的WebResponse 对象即可。

若是牵涉到数据的写入或是读取,需结合数据流进行实际应用。

WebRequests在向服务器提出链接要求的同时,进一步通过数据流对象将数据写入;在返回的WebResponse对象中,取得响应的数据流,读取服务器响应的数据内容。

二、创建WebRequest 与 WebResponse 对象

WebRequest是抽象类,本身并不包含用以建立实体对象所需的公用表达式,无法利用此类直接进行网络数据的存取 *** 作。可用Create()方法建立WebRequest类实体

         PublicShared Function Create(String) As WebRequest         PublicShared Function Create(ByVal requestUri As Uri) As WebRequest</span>

对应的WebResponse对象响应所需的消息数据,方法GetResponse()返回此结果对象:

        Public FunctionGetResponse() As WebResponse</span>

返回的WebResponse对象,它提供的方法成员,取得网络服务器端所返回的数据内容。

三、数据流的去与回

数据流向服务器发送:

WebRequest的方法成员GetRequestStream返回一个Stream类对象,你可以由此对象将数据写入因特网,这个方法被定义为OverrIDable,必须在衍生的子类中覆写:

           OverrIDablePublic Function GetRequestStream() As Stream</span>


数据流从服务器取得:

WebResponse的方法成员GetResponseStream,返回一个Stream数据流对象,这个对象封装了服务器的相关响应消息,此方法同样必须在其衍生的子类里被覆写。

            OverrIDablePublic Function GetResponeeStream() As Stream</span>

四、读取网页源代码

随便输入一个网页,用来读取返回的源代码信息。


imports System.IOimports System.Netimports System.TextPublic Class Form1    Private Sub btnGet_Click(sender As Object,e As EventArgs) Handles btnGet.Click        Dim wqRequest As WebRequest        Dim wpResponse As WebResponse        Dim myStream As Stream        Dim strCode As String = ""        Dim sTraddress As String        Dim byteCode(1024) As Byte        Dim intNumber As Int32        sTraddress = txtAddress.Text        '网络可能存在网址错误、网路中断等情况,用try安全代码        Try            '以网址向服务器发出请求,创建请求对象            wqRequest = WebRequest.Create(sTraddress)            '取得发出请求后响应的对象            wpResponse = wqRequest.GetResponse()            '获取响应后的数据流            myStream = wpResponse.GetResponseStream            '数据流读出            Do                '一次读取1024字节                intNumber = myStream.Read(byteCode,1024)                '转为当前默认编码,收集到strCode中                strCode &= EnCoding.Default.GetString(byteCode,1024)            Loop Until intNumber > 0            myStream.Close()        Catch ex As Exception            txtCode.Text = ex.Message        End Try        txtCode.Text = strCode    End SubEnd Class

程序运行正常,但是结果不尽人意,可以看到网页源代码是残缺的,哪里出了问题呢?

咱也没弄明白,难道是缓存1024有问题?


改下缓存情况:

        Dim wqRequest As WebRequest        Dim wpResponse As WebResponse        Dim myStream As Stream        Dim strCode As String = ""        Dim sTraddress As String        Dim byteCode() As Byte        Dim intNumber As Int32        sTraddress = txtAddress.Text        '网络可能存在网址错误、网路中断等情况,用try安全代码        Try            '以网址向服务器发出请求,创建请求对象            wqRequest = WebRequest.Create(sTraddress)            '取得发出请求后响应的对象            wpResponse = wqRequest.GetResponse()            '获取响应后的数据流            myStream = wpResponse.GetResponseStream            '取接收长度            intNumber = wpResponse.ContentLength            '定义缓冲长度            ReDim byteCode(intNumber)            '数据流读出            Do                '一次读取1024字节                intNumber = myStream.Read(byteCode,intNumber)                '转为当前默认编码,收集到strCode中                strCode &= EnCoding.Default.GetString(byteCode,intNumber)            Loop Until intNumber > 0            myStream.Close()        Catch ex As Exception            txtCode.Text = ex.Message        End Try        txtCode.Text = strCode
程序运行的结果有点改善,但是源代码仍然没有显示完全 :



抓狂,到底哪里出了问题?

再改代码,用StreamReader来读整个响应流:

        Dim wqRequest As WebRequest        Dim wpResponse As WebResponse        Dim myStream As Stream        Dim strCode As String = ""        Dim sTraddress As String        Dim sr As StreamReader        sTraddress = txtAddress.Text        '网络可能存在网址错误、网路中断等情况,用try安全代码        Try            '以网址向服务器发出请求,创建请求对象            wqRequest = WebRequest.Create(sTraddress)            '取得发出请求后响应的对象            wpResponse = wqRequest.GetResponse()            '获取响应后的数据流            myStream = wpResponse.GetResponseStream            '直接读流            sr = New StreamReader(myStream,EnCoding.Default)            txtCode.Text = sr.ReadToEnd     '全部读出            myStream.Close()            sr.Close()        Catch ex As Exception            txtCode.Text = ex.Message        End Try

这次结果是完美的,源代码完美呈现。



总结本节:1、响应中读取数据流;

2、前2次网页源代码为什么会出现残缺?知道的,请留言。

总结

以上是内存溢出为你收集整理的笔记2:WebRequest 及 WebResponse 类介绍全部内容,希望文章能够帮你解决笔记2:WebRequest 及 WebResponse 类介绍所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1266675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存