一、URL编码解码

  url的编码解码需要用到标准模块urllib中的parse方法

 from urllib import parse
url = 'http://www.baidu.com?query=python基础教程 $%^&'
url_str = parse.quote_plus(url) # url编码
baidu_url = 'http%3A%2F%2Fwww.baidu.com%3Fquery%3Dpython%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B+%24%25%5E%26'
baidu_url_str = parse.unquote_plus(baidu_url) # url解码

 二、if __name__ == '__main__'

  Python不同于C/C++,程序并不需要执行主程序main()这样的程序入口,而是文件自上而下的编译执行。在很多Python程序中都会有下面这样的语句:

 if __name__ == '__main__':
pass

  这条语句的作用是判断这个Python文件是别的地方导入的还是直接运行的,一般是调试代码的时候使用,在它下面会写一些调试的代码。如果直接运行这个文件就会执行它下面的调试代码,如果通过其他文件导入这个文件执行,就不会运行它下面的调试代码,因为直接运行这个文件时,__name__的结果就是__main__,可以通过print(__name__)来验证。

三、练习

签名规则计算:

1、请求数据:vendorId=100&ip=127.0.0.1&Version=2.0&mac=D4-81-D7-CA-20-29

2、商家编码:vendorId

3、计算规则:

  (1) 将商家编码(vendorId)进行2次md5加密,得到一个字符串Astr
  (2) 再将请求数据进行一次urlDecode处理,得到一个字符串urlDecodeStr
  (3) Astr+urlDecodeStr再进行一次md5加密获得最终的签名

 from urllib import parse
import hashlib
class Sign(object):
def __init__(self,req_data):
self.req_data = req_data # 这写了self的话,在其他的函数里面也可以用self.xx
self.get_vendorId() # 构造函数中调用类里面的函数
self.get_sign() # 构造函数中调用类里面的函数
def my_md5(self,str):
md = hashlib.md5()
md.update(str.encode())
return md.hexdigest()
def get_vendorId(self):
data_dic = {}
sub_str = self.req_data.split('&')
for i in sub_str:
data_dic[i.split('=')[0]] = i.split('=')[1]
self.vendorid = data_dic.get('vendorId')
def get_sign(self):
Astr = self.my_md5(self.my_md5(self.vendorid)) # 两次md5加密
urlDecodeStr = parse.quote_plus(self.req_data) # url编码
beforeMD5 = Astr + urlDecodeStr
self.sign = self.my_md5(beforeMD5)
return self.sign if __name__ == '__main__':
# 请求数据:
s = 'vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;'
# 实例化:
s_sign = Sign(s)
print(s_sign.get_sign()) # 构造函数里面如果没有调用,这里需要调用函数
print(s_sign.sign) # 构造函数里面如果已经调用了函数,这里可以直接用返回值

此时直接运行该文件的结果为:

afaa051aa024628edf92c85b66f3eefe
afaa051aa024628edf92c85b66f3eefe

如果是以模块的形式导入运行该文件,则if __name__ == '__main__'下面的这几行代码不会执行

Python学习之==>URL编码解码&if __name__ == '__main__'的更多相关文章

  1. python中的URL编码和解码

    python中的URL编码和解码:test.py # 引入urllib的request模块 import urllib.request url = 'https://www.douban.com/j/ ...

  2. sed处理url编码解码=== web日志的url处理

    URL 编码/解码方法(linux  shell实现),方法如下: 1.编码的两种方法: admin@~ 11:14:29>echo '手机' | tr -d '\n' | xxd -plain ...

  3. ASP.NET中Url编码解码

    今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码 ...

  4. cookie的中文乱码问题【URL编码解码】

    先搞明白为什么会乱码,为什么要转码: 在tomcat 8 之前,cookie中不能直接存储中文数据.需要将中文数据转码,一般采用URL编码(%E3).在tomcat 8 之后,cookie支持中文数据 ...

  5. 编码解码--url编码解码

    url编码解码,又叫百分号编码,是统一资源定位(URL)编码方式.URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通 ...

  6. java web url编码解码问题(下载中文名文件)

    问题描述:需要url直接访问中文名的文件,类似于在地址栏里直接输入http://localhost:8080/example/丽江旅游攻略.doc 来进行文件下载,tomcat的server.xml文 ...

  7. Delphi中处理URL编码解码

    Delphi中处理URL编码解码 一.URL简单介绍     URL是网页的地址,比方 http://www.shanhaiMy.com. Web 浏览器通过 URL 从 web server请求页面 ...

  8. WebApi中对请求参数和响应内容进行URL编码解码

    项目经测试,发现从IE提交的数据,汉字会变成乱码,实验了网上很多网友说的给ajax加上contentType:"application/x-www-form-urlencoded; char ...

  9. 007-TreeMap、Map和Bean互转、BeanUtils.copyProperties(A,B)拷贝、URL编码解码、字符串补齐,随机字母数字串

    一.转换 1.1.TreeMap 有序Map 无序有序转换 使用默认构造方法: public TreeMap(Map<? extends K, ? extends V> m) 1.2.Ma ...

随机推荐

  1. Centos7安装RocketMQ4.4

    网上的教程坑贼鸡儿多 一.安装maven RocketMQ依赖maven打包,所以先要在虚拟机中安装maven,我使用的是v3.3.9. 1:进入指定目录下载maven 包 cd /usr/local ...

  2. 索尼展示基于MicroLED技术的16K显示屏:约780吋

    尽管 8K 彩电刚刚在消费级市场崭露头角,更极致的 16K 却已不慌不忙地登场了. 在日前于拉斯维加斯举办的 NAB 2019 展会上,索尼就秀出了旗下的 16K 显示设备,它目前正在日本横滨的资生堂 ...

  3. aria2的安装与配置

    aria2安装 安装 epel 源: yum install epel-release 然后直接安装: yum install aria2 -y 配置 Aria2 创建目录与配置文件 这一步需要切换到 ...

  4. 制作jar包到本地仓库

    转载地址:http://blog.csdn.net/yzllz001/article/details/54529606 项目要用到支付宝的扫码支付,后台使用的maven 问了客服 官方目前没有 mav ...

  5. Codeforces 980 并查集/模拟贪心最小字典序 找规律/数去除完全平方因子 逆思维倍增预处理祖先标记点

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...

  6. [易学易懂系列|rustlang语言|零基础|快速入门|(12)|Enums枚举]

    [易学易懂系列|rustlang语言|零基础|快速入门|(12)] 有意思的基础知识 Enums 今天我们来讲讲枚举. 在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者 ...

  7. Maven工程构建

    Maven 相关术语: 本地资源库:用来存储项目的依赖库,默认的文件夹是 “.m2” 目录 中央存储库: 用来下载所有项目的依赖库的默认位置 Maven pom.xml: 项目对象模型(Project ...

  8. Python 爬虫插件

    #coding:utf-8import sys,urllib2,re,Queuesys.path.append("..") from lib.Http_Class import H ...

  9. thinkphp类型转换

    类型转换 说白了就是在model类中声明的字段输出类型:其语法如下: 注意strtotime()函数可以将诸如‘2018-12-21’这样的日期字符串转为整数存入数据库 自动完成---等于提前对某一表 ...

  10. phantomjs读取文件转换数组

    //要读取的文件路径,支持TXT和CSV var openFilepath="lieBiao.txt"; phantom.outputEncoding="GB2312&q ...