C#完成一个简易图形界面的基于HTTP协议的浏览器客户端

一、HTTP

  1. HTTP定义
    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送 WWW 方 式的数据,浏览器与 Web 服务器之间所遵循的网络通信协议就是 HTTP。

  2. HTTP原理
    HTTP 是一种基于客户机/服务器的请求/应答通信模式。一个客户机与 Web 服务器建立连接后,发送一个请求报文给服务器,服务器接到请求后,进行相应的操作后并返回响应报文给客户端浏览器。
    ①HTTP请求
    HTTP 请求报文内容:请求行、消息报头、请求正文
    请求行格式:<Method> <Request-URI> <HTTP-Version> <CRLF>

    Method 表示请求方法;Request-URI 是一个统一资源标识符;HTTP-Version 表示 请求的 HTTP 协议版本;CRLF 表示回车和换行。
    常用请求方法GET,POST
    GET:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用 GET 方法向 服务器获取资源,例如: GET /form.html HTTP/1.1 (CRLF)。
    POST:要求被请求服务器接受附在请求后面的数据,常用于提交表单。

    消息报头主要包括接收的内容浏览器可以接受的字符编码集,可以支持的web服务器返回内容压缩编码类型,可接受的语言,HTTP 授权的授权证书 等。
    ②HTTP响应
    HTTP 响应报文内容:状态行、消息报头、响应正文
    状态行格式:<HTTP-Version> <Status-Code> <Reason-Phrase> <CRLF>

    HTTP-Version 表示服务器 HTTP 协议的版本;Status-Code 表示服务器发回的响 应状态代码;Reason-Phrase 表示状态代码的文本描述。

    常用的状态码

    态码 代表含义
    200 OK (客户端请求成功)
    400 Bad Request (客户端请求有语法错误,不能被服务器所理解)
    401 Unauthorized (请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用)
    403 Forbidden (服务器收到请求,但是拒绝提供服务)
    404 Not Found (请求资源不存在,例如输入了错误的 URL 的情况)
    500 Internal Server Error (服务器发生不可预期的错误)
    503 Server Unavailable (服务器当前不能处理客户端的请求,一段时间后, 可能恢复正常)

    消息报头主要包括响应体的语言,响应体的长度,请求资源可替代的备用的另一地址,返回资源的MD5校验值等。

二、HTTP 客户端编程方法(C#)

本文章重点是后面几个内容。

  1. Socket
  2. TcpListener
  3. WebClient
    用于网络客户端操作。
  4. HttpWebRequest
    用于获取和操作HTTP请求。
  5. HttpWebResponse
    用于获取和操作HTTP应答。
  6. WebRequest
    用于获取和操作Web请求。
  7. WebResponse
    用于获取和操作Web应答。
  8. Uri
    用于获取和操作网络资源位置。

三、创建C#工程

创建C#窗口工程
在这里插入图片描述
设计界面
最简单的一个web客户端的界面
在这里插入图片描述
添加的控件包括lable,button,webBrowser,textBox。为了实现全屏的时候,控件可以自动缩放大小,对其Anchor属性进行设置,设置为Top、Bottom、Left、Right。

四、最简单的浏览器(客户端)实现

本程序主要功能是输入网址,点击浏览按钮,就会显示对应网页。
主要代码

private void button1_Click(object sender, EventArgs e)
{
    
    
     //获取输入的网址
     string url = textBox1.Text;
    //创建http链接
    //HttpWebRequest对象实例:该类用于获取和操作HTTP请求 var可改成HttpWebRequest
    //Create:创建WebRequest对象
   //var request = (HttpWebRequest)WebRequest.Create(url); 
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

    //HttpWebResponse对象实例:该类用于获取和操作HTTP应答 var可改成HttpWebResponse
    //GetResponse:获取答复
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    //var response = (HttpWebResponse)request.GetResponse(); 

    //构造数据流对象实例
    Stream stream = response.GetResponseStream();//GetResponseStream:获取应答流
    StreamReader sr = new StreamReader(stream);  //从字节流中读取字符

    //从流当前位置读取到末尾并显示在WebBrower控件中
    string content = sr.ReadToEnd();
    webBrowser1.DocumentText = content;
}

本代码主要采用webBrowser,HttpWebResponse,HttpWebResponse类实现获取网页。
运行结果
在这里插入图片描述
点击页面上的贴吧链接
在这里插入图片描述
由于本客户端是最简单程序,对一些script脚本不能够正确的解析,就会弹出上面图中的对话框。

五、总结

本过程主要是了解Http协议原理,它是怎么实现获取到页面。总的来说,Http协议是通过浏览器向服务器发送请求,然后服务器回应客户端,来获取数据的。如果想要写一个更加标准的,更好的浏览器客户端,就需要更深入了解这个过程,同时也需要对webBrowser有一定的了解。

六、参考资料

  1. C# WebBrowser简易浏览器Demo
  2. C# 网络编程之最简单浏览器实现

猜你喜欢

转载自blog.csdn.net/qq_43279579/article/details/110454506