一、URL编码解码

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

  1. from urllib import parse
  2. url = 'http://www.baidu.com?query=python基础教程 $%^&'
  3. url_str = parse.quote_plus(url) # url编码
  4. 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'
  5. baidu_url_str = parse.unquote_plus(baidu_url) # url解码

 二、if __name__ == '__main__'

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

  1. if __name__ == '__main__':
  2. 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加密获得最终的签名

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

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

  1. afaa051aa024628edf92c85b66f3eefe
  2. 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. OpenCV笔记(I)

    这里记一下开始入手OpenCV碰到的一些问题以及解决办法.学习参考书是<OpenCV 4 计算机视觉项目实战(原书第2版)>,ISBN:978-7-111-63164-4. Ubuntu ...

  2. PAT Basic 1067 试密码 (20 分)

    当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度不超过 20 的.不包含空格. ...

  3. web框架-(六)Django补充---form表单验证

    一.form表单验证 1. 常规html页面的form表单验证 常规页面中,如果想实现对表单中用户输入信息的数据验证,需要配合Ajax来实现. 使用前我们先来熟悉下函数参数:request,其中包含的 ...

  4. Linux下vim显示行数

    在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的.我们有二种办法可以解决: 第一种是,手动显示:在 ...

  5. linux命令历史

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  6. Android 在 4G 下访问 IPV6 慢的解决方案

    Android 在 4G 下访问 IPV6 慢的解决方案 Android4G ipv6 起因 今天,用户反馈 Android 端加载数据较慢,经 Android 开发人员排查后,发现在公司 wifi ...

  7. UI线程-重绘,回流

    性能消耗大 程序要操作 或 更改界面内容,必须向单一线程执行请求,把这个单一的线程称为事件派发线程,简称为 UI 线程

  8. 按照行数分割excel

    本来是想通过NOPI自己编写个小工具分割excel的,但是不想去研究API,就百度了一下,找了很久,有几个软件说是为了这个功能而生,实际上要么不能使用,要么出错,所以暂时没有公开可用的软件. 然后我就 ...

  9. 【NOIP2016提高A组模拟9.9】运输妹子

    题目 小轩轩是一位非同一般的的大农(lao)场(si)主(ji),他有一大片非同一般的农田,并且坐落在一条公路旁(可以认为是数轴),在他的农田里种的东西也非同一般--不是什么水稻小麦,而是妹子. 在小 ...

  10. VUEX报错 [vuex] Do not mutate vuex store state outside mutation handlers

    数组 错误的写法:let listData= state.playList; // 数组深拷贝,VUEX就报错 正确的写法:let listDate= state.playList.slice(); ...