python学习笔记18(Network Technology网络技术)

知识点1:
传输控制协议:
Transport Control Protocol(TCP)

在这里插入图片描述

知识点2:
TCP Port Numbers:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
知识点3:
Sockets in python(python中的接口)

import socket
mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysock.connect(('data.pr4e.org' , 80))

在以上代码当中,data.pr4e.org是HOST
80是PORT

知识点4:
超文本传输协议(HTTP)

在这里插入图片描述
在这里插入图片描述
URLs: Uniform Resources Locators (统一资源定位器)
herf value:如果要从HTML中点到另一个文件,这个HTML中就有这个文件的herf value
知识点5:
从一个页面的链接调到另一个页面的原理(Request Response Cycle)

在这里插入图片描述
具体的步骤:

  • 点击连接后,browser识别出了点击,便在这个网页的HTML中找相关信息,需要链接哪个服务器,链接哪个端口,检索哪个文件。
  • browser建立与对应端口的链接后,发出一个“Get Request”到端口80(指定的端口)。
  • 对应的服务器分析这个Request然后找出正在寻找的文件。
  • 服务器以HTML的形式作出回应,如图中的绿色块,这块HTML包含了很多的信息。
  • 浏览器读取回应的相关信息,作出显示。

在这里插入图片描述
以上这是古老的Telnet的操作方式。
输入第一个字块的内容,返回紫块和蓝块,其中紫块为header,蓝块为content of the file

实例:
在这里插入图片描述
注释:

  • 前两行,导入socket和连接socket,socket就好比是服务器的门,连接了socket知识触碰到了门把手,有了开门的办法,但是还是没有实际打开门。
  • 执行完第三行是真正连接上了,但是还没有"send stuff"。
  • 可以使用socket自带的receive和send等来进行send or receive stuff。
  • 注意cmd末尾的encode,该具体的作用下回分解。
  • 注意\r\n\r\n是两个enter,类比古老的Telnet的 操作方式。
  • 用一个while loop来接收服务器发回的数据,其中if-break是文件的最后或者传输完成的标志。
  • 如果不是传输的最后,获取到了数据,就decode

实际代码为:

import socket  #导入对应的库

mysock = socket.socket(socket.AF_INET , socket.SOCK_STREAM)  #摸到门把手
mysock.connect(('data.pr4e.org' , 80))
cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\n\n'.encode()  #send HTTP comand,如果这段代码出现了问题,尝试将\n\n更改为\r\n\r\n
mysock.send(cmd)

while True:
    data = mysock.recv(512)
    if(len(data)<1):  #传输完成或到最后一个字符
        break
    print(data.decode())
mysock.close()

输出结果为:
在这里插入图片描述
如果直接复制的话:
HTTP/1.1 400 Bad Request

Date: Sun, 23 Jun 2019 01:57:33 GMT

Server: Apache/2.4.18 (Ubuntu)

Content-Length: 308

Connection: close

Content-Type: text/html; charset=iso-8859-1

400 Bad Request

Bad Request

Your browser sent a request that this server could not understand.


Apache/2.4.18 (Ubuntu) Server at do1.dr-chuck.com Port 80

可见是出了问题的,因此将代码修改为:

cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode()

运行结果为:
在这里插入图片描述
解读 .encode()的作用
因为在python当中字符串都是统一编码的(unicode),而我们要用UTF-8编码模式进行交互。因此,encode的作用就是将unicode转化为UTF-8。

发布了34 篇原创文章 · 获赞 5 · 访问量 6922

猜你喜欢

转载自blog.csdn.net/weixin_43593303/article/details/92090537
今日推荐