urllib库中的URL编码解码和GETPOST请求
在urllib库的使用过程中,会在请求发送之前按照发送请求的方式进行编码处理,来使得传递的参数更加的安全,也更加符合模拟浏览器发送请求的形式。这就需要用urllib中的parse模块。parse的使用主要提供了输送连接的编码解码处理。对于不同的请求发送方式,parse的使用方法不是很相同,下面是我的学习笔记。
GET方法
parse的使用流程大体就是在发送请求的时候将发送的内容使用字典封装起来,然后按照拼凑的方式将查询的关键信息拼凑到链接后,然后发送请求。如下所示:
- 1 d = {
- 2 'q':'中国'
- 3 }
- 4 u = parse.urlencode(d) #将传递的参数进行编码,编码后的格式是按照字节以%包裹的形式进行传递的.
- 5 #值得注意的是,当传递的参数是汉字时,默认是按照‘utf-8’的格式进行编码的,
- 6 #比如汉字中国的编码为%E4%B8%AD%E5%9B%BD
- 7 url = '{}?{}'.format(base_url,u)
完整的GET方法发送请求请参考下面这个小例子。
- 1 '''
- 2 @Description: url编码和GET请求
- 3 @Version: 1.0
- 4 @Autor: Montoin Yan
- 5 @Date: 2020-02-02 15:44:59
- 6 @LastEditors : Montoin Yan
- 7 @LastEditTime : 2020-02-02 20:29:00
- 8 '''
- 9 ##在使用GET方法进行传递参数的过程中,我们一般会进行一些简单的编码操作用来保证参数传递的保密性。在urllib.parse中提供了这样一种方法进行编码与解码
- 10
- 11 from urllib import parse
- 12 from urllib.request import urlopen,Request
- 13 import random
- 14
- 15 #http://www.bing.com/search?q=中国
- 16 base_url = 'http://www.bing.com/search'
- 17
- 18 #parse在编码时支持的是字典格式,可以将字典中的键值对按照随机的形式进行排序,拼凑成一个类似于链接格式
- 19 d = {
- 20 'q':'中国'
- 21 }
- 22 u = parse.urlencode(d) #将传递的参数进行编码,编码后的格式是按照字节以%包裹的形式进行传递的.
- 23 #值得注意的是,当传递的参数是汉字时,默认是按照‘utf-8’的格式进行编码的,
- 24 #比如汉字中国的编码为%E4%B8%AD%E5%9B%BD
- 25 url = '{}?{}'.format(base_url,u) #设置两个字典,将得到的url拼凑在一起
- 26
- 27 print(url)
- 28 u_url = parse.unquote(url) #将编码后的结果进行解码
- 29 print(u_url)
- 30
- 31 #在编码或者解码结束后,会进行连接的传递访问,这就运用到urllib.request模块,这部分常用的知识点上一篇博客已经总结过了
- 32 ua_list = [
- 33 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
- 34 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
- 35 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
- 36 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
- 37 ]
- 38 #随机pick one
- 39 ua = random.choice(ua_list)
- 40 request = Request(url,headers={
- 41 'User-agent':ua
- 42 })
- 43 # response = urlopen(url,timeout=3) #GET
- 44 response = urlopen(request,timeout=3)
- 45 #将使用GET方法得到的信息储存到任意文件中
- 46 with response:
- 47 with open('bing.txt','wb') as f:
- 48 f.write(response.read())
- 49
- 50 print('成功!')
结果可以参考下面的信息:
POST方法
使用POST方法的形式就在于我们不会在发送请求的时候将请求信息显示出来,而是在表单提交的时候将请求信息隐藏起来进行发送。而使用编码方式进行发送,也会提高请求发送过程中的安全性。与GET方法不同发是,在请求返回的过程中,会可能返回一些JSON格式的数据,所以在处理这些数据的过程中,需要将JSON数据转换为字典形式。
这里给大家推荐一个测试的网址:http://httpbin.org 这个网址中很多的关于spider发送请求的测试,很实用。
post方法发送请求可以参考下面这个小例子。
- 1 '''
- 2 @Description: URL编码和POST请求
- 3 @Version: 1.0
- 4 @Autor: Montoin Yan
- 5 @Date: 2020-02-02 20:18:08
- 6 @LastEditors : Montoin Yan
- 7 @LastEditTime : 2020-02-02 20:54:28
- 8 '''
- 9
- 10 #不同于GET方法请求,POST方法进行数据请求的时候是不能直接看到传递的参数的,并且POST方法返回的数据通常是JOSN形式的,所以使用不同的方式进行传递
- 11 from urllib import parse
- 12 from urllib.request import urlopen,Request
- 13 import random
- 14 import simplejson
- 15
- 16
- 17 url = 'http://httpbin.org/post'
- 18
- 19 d = {
- 20 'name':'张三!@#$%^',
- 21 'age':'11'
- 22 }
- 23 data = parse.urlencode(d) #使用POST方式传递数据,相当于将data数据放置到body中进行传输
- 24
- 25
- 26
- 27 ua_list = [
- 28 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
- 29 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
- 30 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
- 31 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
- 32 ]
- 33 #随机pick one
- 34 ua = random.choice(ua_list)
- 35 request = Request(url,headers={
- 36 'User-agent':ua
- 37 })
- 38 #这里使用urlopen的第二个参数进行数据的传递
- 39 response = urlopen(request,data =data.encode(),timeout=3)
- 40 #将使用GET方法得到的信息储存到任意文件中
- 41 with response:
- 42 text = response.read()
- 43 print(type(text))
- 44 d = simplejson.loads(text)
- 45 print(d)
- 46 print(type(d))
- 47
- 48 print('成功!')
执行的结果可以参考下面的内容:
urllib库中的URL编码解码和GETPOST请求的更多相关文章
- Delphi中处理URL编码解码
Delphi中处理URL编码解码 一.URL简单介绍 URL是网页的地址,比方 http://www.shanhaiMy.com. Web 浏览器通过 URL 从 web server请求页面 ...
- 详解JavaScript中的Url编码/解码,表单提交中网址编码
本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape ...
- ASP.NET中的URL编码解码(转)
在对URL进行编码时,该用哪一个?这两都使用上有什么区别吗?测试: string file="文件上(传)篇.doc";string Server_UrlEncode=Server ...
- 「Python 编程」编码实现网络请求库中的 URL 解析器
摘要:怎么写出更短的代码并不是这次要讨论的话题.今天我们来研究一下:运行代码的计算机是如何找到目标服务器的? 相信各位 Python 开发者都用过 Requests 库,有些朋友还用过 WebSock ...
- cookie的中文乱码问题【URL编码解码】
先搞明白为什么会乱码,为什么要转码: 在tomcat 8 之前,cookie中不能直接存储中文数据.需要将中文数据转码,一般采用URL编码(%E3).在tomcat 8 之后,cookie支持中文数据 ...
- python中的URL编码和解码
python中的URL编码和解码:test.py # 引入urllib的request模块 import urllib.request url = 'https://www.douban.com/j/ ...
- ASP.NET中Url编码解码
今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码 ...
- WebApi中对请求参数和响应内容进行URL编码解码
项目经测试,发现从IE提交的数据,汉字会变成乱码,实验了网上很多网友说的给ajax加上contentType:"application/x-www-form-urlencoded; char ...
- Python学习之==>URL编码解码&if __name__ == '__main__'
一.URL编码解码 url的编码解码需要用到标准模块urllib中的parse方法 from urllib import parse url = 'http://www.baidu.com?query ...
随机推荐
- NVIDIA数据中心深度学习产品性能
NVIDIA数据中心深度学习产品性能 在现实世界的应用程序中部署AI,需要训练网络以指定的精度融合.这是测试AI系统的最佳方法-准备将其部署在现场,因为网络随后可以提供有意义的结果(例如,对视频流正确 ...
- PyTorch 图像分类
PyTorch 图像分类 如何定义神经网络,计算损失值和网络里权重的更新. 应该怎么处理数据? 通常来说,处理图像,文本,语音或者视频数据时,可以使用标准 python 包将数据加载成 numpy 数 ...
- HiCar基本功能介绍
HiCar基本功能介绍 基本概述 一方面,基于操作系统超强的分布式能力,HUAWEI HiCar通过手机和汽车之间的连接,基于三层标准与能力,构建手机和汽车互助资源池,把手机的服务生态延伸到车内,实现 ...
- TensorRT IRNNv2Layer
TensorRT IRNNv2Layer IRNNv2Layer层实现递归层,如递归神经网络(RNN).门控递归单元(GRU)和长短期记忆(LSTM).支持的类型有RNN.GRU和LSTM.它执行一个 ...
- 编译原理-确定有穷自动机(deterministic finite automata ,DFA)
是一个五元组 M=(S,∑,f,S0,F) 其中 S:有穷状态集 ∑:输入字母表(有穷) f:状态转换函数.f(S,a)=S' 是单值部分映射,每个状态面临一个输入符号时,转入的后继状态是确定的. S ...
- SpringBoot基础系列之自定义配置源使用姿势实例演示
[SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...
- 实验2、Flask模板、表单、视图和重定向示例
实验内容 1. 实验内容 表单功能与页面跳转功 能是Web应用程序的基础功能,学习并使用他们能够更好的完善应用程序的功能.Flask使用了名为Jinja2的模板引擎,该引擎根据用户的交互级别显示应用程 ...
- 【曹工杂谈】Mysql客户端上,时间为啥和本地差了整整13个小时,就离谱
瞎扯一点非技术 本来今天上午就打算写的,结果中途被别的事吸引了注意力,公司和某保险公司合作推了一个医疗保险,让我们给父母买,然后我研究了半天条款:又想起来之前买的支付宝那个好医保,也买了两年多了,但是 ...
- Waymo object detect 2D解决方案论文拓展
FixMatch 半监督中的基础论文,自监督和模型一致性的代表作. Consistency regularization: 无监督学习的方式,数据\(A\)和经过数据增强的\(A\)计做\(A'\) ...
- 项目启动报错:Redis health check failed
最近是重新开发整个项目,在上线测试的时候发现这个问题. 项目环境:SpringBoot2.x+Consul+Redission+Maven 报错的信息如下: o.s.b.a.redis.RedisHe ...