python之自动更新ip项目的部分总结

最近在用python写一个自动更新ip的小程序,记录下其中遇到的一些问题,
巩固一下知识。


(1) 写明程序的基本信息,比如时间,地点,文件名等
(2) 可以设置一个DEBUG模式

DEBUG = False
if DEBUG:
	...
else:
	...

邮件系统

import smtplib
import poplib
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr,formatadder

#邮箱基本信息 这里以163邮箱为例
smtp_server  = 'smtp.163.com'
pop_server = 'pop.163.com'
email_account = 'xxxx@163.com'
email_password = 'xxxxx'	#这个是邮箱授权码,并非登录密码

def _format_addr(s):
	"""
	格式邮件地址信息
	"""
	#解析字符串中的名字和地址
	name,addr = parseaddr(s)	
	#将名字编码成utf-8的格式,因为名字追踪可能有汉字,然后将其与地址一起格式化成为规范的模式
	return formataddr(Header(name,'utf-8').encode(),addr)

def send_emails(user_list):
	"""
	发送邮件,用smtp协议
	"""
	from_addr = email_account
	password = email_password
	#连接服务器,有两种方式
	#1. server = smtplib.SMTP(smtp.server,25) 这种方式不安全
	#2.
	server = smtplib.SMTP_SSL(smtp_server,465)
	server.connect(smtp_server,465)
	
	#登录邮箱服务器
	server.login(from_addr,password)
	
	#注意,在发邮件的时候,可能会发生一些错误,不如
	#451 MI:DMC 当前连接发送的邮件数量超出限制。请控制每次连接中投递的邮件数量;
	#遇到这种情况,可以查明是哪种错误,然后再解决它

	#邮件内容
	msg = MIMEText('text','plain','utf-8')#这里plain表示纯文本
	msg['From'] = _format_addr('name<%s>'%from_addr)
	msg['To'] = _fromat_addr('<%s>'%to_adr)
	msg['Subject'] = Header('title').encode('utf-8')#邮件主题
	#如果没有上述信息,邮件可能发不出去了,或者可能被当做垃圾邮件
	
	#发送邮件
	server.sendmail(from_addr,[to_addr],msg.as_string))#这里是以字符串的格式发送的邮件内容
	#退出邮件
	server.quit()

def receive_mail():
	"""
	收邮件,用pop协议
	"""
	address = email_account
	password = email_password
	
	#连接POP3邮件服务器
	server = poplib.POP3(pop3_server)

	#登录邮箱
	server.user(address)
	server.pass_(password)

	#list()返回所有邮件的编号,其中mails是一个列表,包含了所有的邮件
	resp,mails,octets = server.list()
	#retr()读取邮件信息
	#这里需要注意的是,邮件的编号是从1开始的,和数组不同
	#lines是一个列表,包含了邮件的所有行
	resp,lines,octets = server.retr(len(mails))
	#邮件内容是二进制格式,不是字符串格式
	#下面读取邮件内容,并且在每一行后面加上一个换行符'\r\n'
	msg_contents_bytes = b''
	for line in lines:
		msg_contents_bytes += (line+b'\r\n')
	msg_contents = msg_contents_bytes.decode('utf-8')
	server.quit()

base64编码

base64编码将3个字节的***二进制***数据转换成4个字节的文本数据,如果最后转换成的字符串长度不是4的倍数,则添加\x00,然后添加与\x00等个数的’=‘。

>>> import base64
>>> base64.b64encode(b'binary\x00string')
b'YmluYXJ5AHN0cmluZw=='
>>> base64.b64decode(b'YmluYXJ5AHN0cmluZw==')
b'binary\x00string'

由于标准的base64编码后可能出现字符+和/,在url中就不能直接作为参数,所以又有一种’url safe’的base64编码,其实就是把字符+和/分别变成-和_

>>> base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')
b'abcd++//'
>>> base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')
b'abcd--__'
>>> base64.urlsafe_b64decode('abcd--__')
b'i\xb7\x1d\xfb\xef\xff'

由于=字符也可能出现在base64编码中,但=用在url、cookie里面会造成歧义,所以很多base64编码后会把=去掉,但解码的时候,需要加上=,是的base64编码的长度永远是4的倍数。


检查ip是否可用

https://ipcheck.need.sh
上面的网站可以用来检查ip是否可用
通过浏览器的开发者工具里的网络调试,可以得到检查后的json内容,其对应的地址为
https://ipcheck.need.sh/api_v2.php?ip=%s’ % ip


对程序进行调试

在python中,设置断点进行debug,这时候,可以选择Console->Show Python Prompt


datetime

now_string=datetime.strftime(datetime.now(),"%Y-%m-%d %H:%M:%S")#将时间元组转换成字符串
datetime.strptime(now_string,’%Y-%m-%d_%H-%M-%S’)#将时间字符串转换成时间元组
上面的格式大小写不能变,但是年月日,时分秒的顺序可以变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值