一、HTTP
-
HTTP定义
HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送 WWW 方 式的数据,浏览器与 Web 服务器之间所遵循的网络通信协议就是 HTTP。 -
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#)
本文章重点是后面几个内容。
- Socket
- TcpListener
- WebClient
用于网络客户端操作。 - HttpWebRequest
用于获取和操作HTTP请求。 - HttpWebResponse
用于获取和操作HTTP应答。 - WebRequest
用于获取和操作Web请求。 - WebResponse
用于获取和操作Web应答。 - 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有一定的了解。