一、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. 安装superset踩过的坑

    问题一: # fabmanager create-admin --app superset setuptools_scm.version.SetuptoolsOutdatedWarning: your ...

  2. YUV格式详解【转】

    转自:http://blog.csdn.net/searchsun/article/details/2443867 [-] YUV格式解析1播放器project2 YUV 采样 表面定义 YUV格式解 ...

  3. windows挂载nfs

    注意:Win10 Creators Update前只有Win10企业版可以挂载NFS, Creators Update后专业版也可挂载NFS了. 安装 按Win+R输入OptionalFeatures ...

  4. Jmeter之cookie的处理方式,token处理

    cookie是什么 由于http是无状态的协议,一旦客户端和服务器的数据交换完毕,就会断开连接,再次请求,会重新连接,这就说明服务器单从网络连接上是没有办法知道用户身份的.怎么办呢?那就给每次新的用户 ...

  5. uwsgi_response_write_body报错的几种情况

    1.uwsgi_response_write_body_do(): Broken pipe 出现这种情况一般是由于客户端无法等到服务端的回应而关闭了连接,常出现与nginx + uwsgi的情况,当u ...

  6. Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion' has value '1.8', but '1.7'

    第一种方法:安装1.8之前安装了1.7,将1.7卸载就好了. 第二种方法:删掉Windows\System32下的java.exe, javaw.exe 就行了,但是安装的1.8的jdk会回到1.7的 ...

  7. Atcoder Regular 098 区间Pre=Xor Q询问区间连续K去最小值最小极差

    C 用scanf("%s")就会WA..不知道为什么 /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset ...

  8. uboot dcc

    arch\arm\lib crt0.S 1.设置sp为CONFIG_SYS_INIT_SP_ADDR include/configs/xxx.h #define CONFIG_SYS_INIT_SP_ ...

  9. [COGS 755]山海经:线段树

    网上似乎这道题的题解很少?写一个吧 我跟这道题的渊源追溯到了上个学期刚刚学线段树的那一天... 当时线段树专题前边的题都是一些板子就不一会就水过了,然后就看到了最后一题的它:山海经 那一个上午,我竭尽 ...

  10. 算法——得到数据流中前K大的数

    用优先队列 public PriorityQueue<Integer> kthLargest(int k, int[]a) { PriorityQueue<Integer> q ...