在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请求的更多相关文章

  1. Delphi中处理URL编码解码

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

  2. 详解JavaScript中的Url编码/解码,表单提交中网址编码

    本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape ...

  3. ASP.NET中的URL编码解码(转)

    在对URL进行编码时,该用哪一个?这两都使用上有什么区别吗?测试: string file="文件上(传)篇.doc";string Server_UrlEncode=Server ...

  4. 「Python 编程」编码实现网络请求库中的 URL 解析器

    摘要:怎么写出更短的代码并不是这次要讨论的话题.今天我们来研究一下:运行代码的计算机是如何找到目标服务器的? 相信各位 Python 开发者都用过 Requests 库,有些朋友还用过 WebSock ...

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

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

  6. python中的URL编码和解码

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

  7. ASP.NET中Url编码解码

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

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

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

  9. Python学习之==>URL编码解码&if __name__ == '__main__'

    一.URL编码解码 url的编码解码需要用到标准模块urllib中的parse方法 from urllib import parse url = 'http://www.baidu.com?query ...

随机推荐

  1. 3D Cube计算引擎加速运算

    3D Cube计算引擎加速运算 华为达芬奇架构的AI芯片Ascend910,同时与之配套的新一代AI开源计算框架MindSpore. 为什么要做达芬奇架构? AI将作为一项通用技术极大地提高生产力,改 ...

  2. CVPR2020:三维点云无监督表示学习的全局局部双向推理

    CVPR2020:三维点云无监督表示学习的全局局部双向推理 Global-Local Bidirectional Reasoning for Unsupervised Representation L ...

  3. Nucleus 实时操作系统中断(上)

    Nucleus 实时操作系统中断(上) Interrupts in the Nucleus SE RTOS 所有现代微处理器和微控制器都有某种中断设施.这种能力对于提供许多应用程序所需的响应能力是必不 ...

  4. thymeleaf+Springboot实现自定义标签

    在项目开发中,有一些组件不能满足我们快速开发的要求,我们需要封装一些组件来更加的便利我们.比如,我们可以封装一个下拉框组件,只要开发人员只有引用这个组件的标签,就能出现效果,而不用再去请求url,渲染 ...

  5. Appium_Android自动化测试Genymotion之模拟器联网设置

    目的: 使用Genymotion做Android项目,需要考虑到联网,以下是设置操作 操作步骤: 打开VM VirtualBox,设置->网络-> 启动模拟器,设置  备注: 模拟器的手机 ...

  6. ES6中的数组常用方法

    数组在JS中虽然没有函数地位那么高,但是也有着举足轻重的地位,下面我就结合这ES5中的一些常用的方法,与ES6中的一些方法做一些说明和实际用途.大家也可以关注我的微信公众号,蜗牛全栈. 一.ES5中数 ...

  7. 实验7、Django VS Flask VS Node:如何选择

    实验介绍 1. 实验内容 在本教程中,我们将详细介绍Django和Flask之间的比较.Flask和Django是基于Python的Web开发框架.许多正在朝着轻型微框架发展.这些框架敏捷,灵活,小巧 ...

  8. 04-拉格朗日对偶问题和KKT条件

    04-拉格朗日对偶问题和KKT条件 目录 一.拉格朗日对偶函数 二.拉格朗日对偶问题 三.强弱对偶的几何解释 四.鞍点解释 4.1 鞍点的基础定义 4.2 极大极小不等式和鞍点性质 五.最优性条件与 ...

  9. 『言善信』Fiddler工具 — 16、使用Fiddler抓取移动端App请求

    目录 1.抓取Android移动端App请求 2.抓取IOS移动端App请求 3.总结: 1.抓取Android移动端App请求 前提: 因为Fiddler抓包的原理就是通过代理,所以确保被测终端要和 ...

  10. JDK并发包二

    JDK并发包二 线程复用--线程池 在线程池中,总有那么几个活跃的线程,当程序需要线程时可以从池子中随便拿一个控线程,当程序执行完毕,线程不关闭,而是将这个线程退会到池子,等待使用. JDK提供了一套 ...