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 ...
随机推荐
- JNDI注入和JNDI注入Bypass
之前分析了fastjson,jackson,都依赖于JDNI注入,即LDAP/RMI等伪协议 JNDI RMI基础和fastjson低版本的分析:https://www.cnblogs.com/pia ...
- Structured Streaming编程 Programming Guide
Structured Streaming编程 Programming Guide Overview Quick Example Programming Model Basic Concepts Han ...
- 全卷积目标检测:FCOS
全卷积目标检测:FCOS FCOS: Fully Convolutional One-Stage Object Detection 原文链接:https://arxiv.org/abs/1904.01 ...
- 【NX二次开发】Block UI 树列表
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- 《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程)
1.简介 jmeter系列的文章结束,本来想趁热打铁顺别将Jmeter和接口测试介绍一下,但是感觉Jmeter时间太长了怕大家吃腻了,还有一个原因就是许多小伙伴们或者童鞋们私信问宏哥什么时候可以有ja ...
- 『言善信』Fiddler工具 — 17、Fiddler常用插件(Willow)
目录 1.Traific Difer插件 2.PDF View插件 3.JavaScript Formatter插件 4.CertMaker for iOS and Android插件 5.Synta ...
- 搭建DG(data guard),及搭建过程中遇到的一些小问题
一.准备工作:主库:虚拟机名称host06 主机名:host06 IP:192.168.100.60 db_name&SID:ENMO db_unique_name:PROD 存储:文件系统 ...
- Tomcat与spring的类加载器案例
Tomcat与spring的类加载器案例接下来将介绍<深入理解java虚拟机>一书中的案例,并解答它所提出的问题.(部分类容来自于书中原文) Tomcat中的类加载器在Tomcat目录结构 ...
- docker2-镜像原理及创建新的镜像
1,镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件 在docker中所有应用 ...
- 重新整理 .net core 实践篇—————HttpClientFactory[三十二]
前言 简单整理一下HttpClientFactory . 正文 这个HttpFactory 主要有下面的功能: 管理内部HttpMessageHandler 的生命周期,灵活应对资源问题和DNS刷新问 ...