首页 > 编程语言 >Python进阶六

Python进阶六

时间:2023-05-29 19:23:18浏览次数:38  
标签:进阶 Python buffer html IP地址 MTA 邮件 socket

网络编程

TCP编程

详细都写CSDN上了。  
使用来socket建立连接
TCP连接是一种可靠的连接,这里建立基于TCP协议连接的socket,

客户端

主要是获取服务器信息的

import socket

#前面这个套接字是表示IPV的就是IP地址的类型,是IPV4,有一个是AF_INET6表示IPV6。
#第二个表示是流格式套接字,是基于HTTP协议的一种比较可靠的传输方式,有一个缓存区,所以保证数据不会丢失。
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 这里传入的参数必须是元组类型的,一个是地址(这个地址有点迷,IP地址和网址域名有什么关系)和端口号(这个比较熟悉,就是服务器什么的进程或者说任务,就会对应什么样的端口号)。
s.connect(("https://www.bilibili.com/",80))
#这里就是建立好连接

# 这里是向浏览器发送请求信息,具体是为什么这样发送,而且发送的格式是什么具体还不知道。
s.send((b'GET / HTTP/1.1\r\nHost: www.bilibili.com\r\nConnection: close\r\n\r\n'))

# 设置一个空列表用来接收从服务器发送过来的信息
buffer = []
#这里使用while循环,我的理解就是接收服务器发送的流式数据,需要一个碗,这个碗的大小就是设置好的1024,然后不断循环,直到获取到全部数据,把数据存入到列表里。
while True:
    d = s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break


#这里再先详细知道一下python中字符串前“b”,“r”,“u”,“f”的作用:
#“u”表示含有中文字符的字符串
#“r”表示是一个普通的字符串,但还是str类型的,所以在前面有这个的字符串里\n,就不表示换行了。
#“b”表示这是一个bytes类型的数据,还是那个用在网络编程里面的,bytes类型数据会默认在前面加个b,表示是字节类型的数据。而且字节类型的数据也是不会遇到‘\n’给换行的。  
#“f”就是输出填充的,f'{name},{age}'。


#还有一个就是在python里面bytes和str的互相转换就是str.encode('utf-8')和bytes.decode('utf-8')。


# **这一点是个重难点**着重记录一下,首先就是从服务器获取到的信息都是bytes(字节类型的),因为在网络编程中,服务器和浏览器都只认字节类型的数据。


#print(buffer)
# data = buffer[0].decode('utf-8')
# print(data)(这里得到的数据就会自动换行了)
#这里面就涉及到网页的信息,获取到服务器发送的信息里面头部信息和html信息之间是有两行换行分割的
# 这里还有个spite方法的使用,1表示分割几次。
# 这里将从服务器获取到的数据是两部分,一部分是表头信息,另一部分是HTML源码。
buffer_html = buffer[0].split(b'\r\n\r\n',1)
#print(buffer_html[1])
html_utf = buffer_html[1]

#将数据写入一个新的文件就这样写,这本来是打开一个文件的意思,后面有'w'表示写文件,就是没有这个文件,就会默认创建一个这样的文件,然后把数据写进去。
#主要要在后面加个'wb'表示以二进制写入,‘r’是只读的意思,还有其他细节可以在网上看。
with open('data.html','wb') as f:
#所以这里需要写入的数据是字节类型的数据
#二进制就是字节类型
    f.write(html_utf)
#这里得到的html最后运行是出现301错误。



获取本机的IP地址
使用socket的gethostbyname()方法获取电脑的IP地址
需要传入自己电脑的名字,使用gethostname获取

import socket

hostname = socket.gethostbyname(socket.gethostname())
print(hostname)

同理既然这个获取IP地址的方法需要传入的参数是设备的名称是不是也可以获取自己手机的IP地址呢,明天来试试。

UDP编程

TCP协议需要建立通信双方的连接且采用流数据。
使用UDP协议,不需要建立连接,只需要知道IP地址和端口号就可以,但不保证数据是否全都传输到,所以比较快。
具体在CSDN上面。

电子邮件

电子邮件的发送就是用过先通过电子邮件软件(QQ邮箱这样的,成为MUA-Mail User Agent邮件用户代理);写好邮件之后,经过MTA(Mail Transfer Agent邮件传输代理,就是网易,新浪这些服务商),会经过很多的邮件传输代理商,MTA负责把邮件传输到目标的代理商(比如你有QQ邮箱写一个邮件发给163.com网易的服务商),传输会经过许多的MTA,这个我们不必要知道;最后MTA传输的邮件会到最后一个代理商MDA(Mail- 邮件投递代理)
发送者->MUA(QQ邮箱)—>MTA->MTA->......->MTA->MDA(目标代理商的服务器)->接收者(需要从服务器上下载下来)

SMTP发送邮件

SMTP发送带附件的邮件

代码已实现,还有对mime有许多不理解。

POP3接收邮件

POP3收取邮件就是编写一个MUA作为客户端,从MDA上将邮件下载下来,然后通过解析原始文本获得内容。

标签:进阶,Python,buffer,html,IP地址,MTA,邮件,socket
From: https://www.cnblogs.com/huanc/p/17441382.html

相关文章

  • Python进阶五
    常用的第三方模块数据分析的常用模块(导师安排)numpynumpy就是操作多维数组,对象是ndarray,就相当于python自己内置的列表list,但是ndarray比list更高效。type(),dtype,astype:在numpy里面有比python内置更多的数据类型,也更精确,比如int32,uint(无符号整数),dtype和type(),都是返回......
  • 16 个必知必会的 Python 教程!
    1.三元运算符三元运算符是if-else语句的简写。语法是value_if_trueifconditionelsevalue_if_false。三元运算符是一行代码,可以替代多行if-else语句,使你的代码更加简洁。1a=52b=103max=aifa>belseb#value_if_trueifconditionelsevalue_if_fal......
  • Python进阶三
    进程和线程一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程;在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,把进程内的这些“子任务”称为线程(Thread),比如Word,它可以同时进行打字、拼写检查、打印等事情。......
  • Python进阶七
    访问数据库importsqlite3#连接一个数据库,要是没有就会自己创建一个conn=sqlite3.connect("MySQL.db")#创建一个游标,用于执行SQL语句cursor=conn.cursor()##创建表创建表的一般结构就是:createtable<表名>(<属性名字类型>,......);#或者也可以把要执行的语......
  • python中测试方法所用的时间—timeit
    方法代码使用timeit方法测试两个函数的运行速度importtimeitstrlist=['Thisisalongstringthatwillnitkeepinmemory.'forninrange(10000)]defuse_join():#使用字符串的join方法连接多个字符串return''.join(strlist)defues_plus():#使用运算符+连接多个字......
  • python使用hTTP方法
    Python中可以使用requests库来发送HTTP请求,其中包括GET、POST、PUT、DELETE等方法。下面是一个使用requests库发送HTTP请求的示例:importrequests#发送GET请求response=requests.get('ExampleDomain')#发送POST请求data={'key1':'value1','key2':'val......
  • python 实现google authenticator 认证
    importosimporttracebackimportpyotpfromqrcodeimportQRCode,constantsclassGoogleAuthenticatorClient:def__init__(self,secret_key=None):self.secret_key=secret_keydefcreate_secret(self):"""生......
  • python 读取、写入、追加、覆盖xls文件
    python读取、写入、追加、覆盖xls文件0、写在前面测试源xls是这样的1、读取xlsdefread_xls(filename:str,sheet_name:str)->List[list]:filename=os.path.abspath(filename)assertos.path.isfile(filename),f'{filename}isnotfile'assertfilen......
  • Python使用to_csv导出文件时参数注意事项
    使用to_csv导出文件时,一定要指定index参数和encoding参数这两个参数;index参数:默认为True,会添加一列标记数据索引。encoding参数:如果不指定utf_8_sig,使用默认参数值,则导出的文件可能会有乱码或串列。cake_data.to_csv(r"C:\E\data.csv",index=False,encoding='utf_8_sig')......
  • Python中的Union这个类的使用
    在Python中,Union是typing模块中定义的一个类,用于表示多个类型中的任意一种类型。Union类型可以用于表示参数或函数返回值等多种情况下可能的不同类型。具体而言,Union类型可以使用typing.Union[type1,type2,...]的语法来定义,其中type1、type2等参数为可能的类型。例......