文章目录
1 建立课程开发环境
课程使用的是基于Linux的系统,可以使用ubuntu发行版。(安装过程略过)
可参考:https://blog.csdn.net/u_hcy2000/article/details/121506905?spm=1001.2014.3001.5501
2 Fetch a Web page
使用telnet来体会浏览器是如何通过HTTP协议从服务器获取一个页面(HTML文档)的
2.1 浏览器发送http请求
- 通过浏览器发送 http://cs144.keithw.org/hello 请求
- 查看页面响应结果:Hello, CS144!
2.2 telnet模拟浏览器发送http请求
键入 telnet cs144.keithw.org http,http请求与服务器建立连接
键入 GET /hello HTTP/1.1 ,这句话告诉服务器 URL 的路径(path)
键入 Host: cs144.keithw.org 这告诉服务器 URL 的主机(host)
键入Connection: close 结束请求
键入 空行,完成了http请求
查看服务器的响应信息如下:
扩展:HTTP请求简介
设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
HTTP 请求一共分为四个部分:请求行,请求头,空行,请求体。
HTTP响应报文格式:响应行、响应头、空行、响应体 四个部分。
3 WebGet
使用TCPSocket来实现发送http请求,并获取响应信息,打印出来。
- 创建一个TCPSocket并与服务器建立连接。
- 向服务器发送请求,格式参照前面fetch a web page部分,注意在HTTP中每行的结尾应该为\r\n。
- 发送完请求后,客户端应该关闭TCPSocket的写功能,对应前面的Connection:close,告诉服务器请求已经发送完毕,服务器只要回复完数据后就可以立刻断开连接。
- 循环读取从服务器发送过来的信息,直到遇到EOF(end of file)。 最后记得需要关闭前面创建的TCPSocket。
课程代码:
void get_URL(const string &host, const string &path) {
// telnet cs144.keithw.org http
// GET /hello HTTP/1.1
// Host: cs144.keithw.org
// Connection: close
// 创建一个客户端对象
TCPSocket client_socket;
// 与服务器建立TCP连接
client_socket.connect(Address(host, "http"));
// 客户端发送请求request
string reqMsg = "GET "+path+" HTTP/1.1\r\n"+"Host: "+host+"\r\nConnection: close\r\n\r\n";
client_socket.write(reqMsg);
// 客户端接收服务端的响应response
while(!client_socket.eof()){
string recvMsg = client_socket.read(