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‘:‘张三[email protected]#$%^‘,
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(‘成功!‘)

  执行的结果可以参考下面的内容:

原文地址:https://www.cnblogs.com/yandashan666/p/12253674.html

时间: 2024-10-13 23:18:38

URL编码解码和GETPOST请求的相关文章

URL编码解码

ios url 编码和解码 1.url编码 ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是: NSString * encodingString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 2.url解码 请求后,返回的数据,如何显示的是这样的格式:%3A%2F%2F,此时需要我们进行UTF-8解码,用到的方法是: NSString *str = [model.

iOS url 编码解码

1.url编码 ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是: NSString * encodingString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 2.url解码 请求后,返回的数据,如何显示的是这样的格式:%3A%2F%2F,此时需要我们进行UTF-8解码,用到的方法是: NSString *str = [model.album_name str

百度移动版的url编码解码代码

1 var decode = function(m) { 2 try { 3 m = decodeURIComponent(m); 4 } catch(e) {} 5 var s = m.split("%"); 6 if (s.length > 1) { 7 s.shift(); 8 for(var i = 0; i < s.length; i++) { 9 var t = s[i]; 10 t = parseInt(t, 16); 11 t = t + 256; 12 t

编码解码--url编码解码

url编码解码,又叫百分号编码,是统一资源定位(URL)编码方式.URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理. 现在已经成为一种规范了,基本所有程序语言都有这种编码,如js:有encodeURI.encodeURIComponent,PHP有 urlencode.urldecode等.编码方法很简单,在该字节ascii码的的16进制字符前面加%. 如 空格字符,ascii码是32,对应16

ASP.NET中Url编码解码

今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码失败,查看问题发现转码的时候把“+”转成了“%”,但是解码的时候把“%”装换成了“ ”空格,最后上网查了下很多网友都遇到过这种问题, 最后把HttpUtility.UrlEncode替换成了一下的方式就OK了. var email="15586757225"; string after =

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

本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape,encodeURI / decodeURI和 encodeURIComponent / decodeURIComponent. 预备知识 foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/ \_______

Google的URL编码解码之delphi

使用google谷歌搜索一下关键词,对应的编码如下:刀:%E5%88%80刀具:%E5%88%80%E5%85%B7刀具网:%E5%88%80%E5%85%B7%E7%9A%84 因此可见,google对URL的编码并非简单的httpencode编码,因为httpencode编码后的字符串应该是带有两个百分号的,而这个是三个百分号.多尝试一下就不难发现googleURL的编码解码规则如下: 1.编码,先UTF8编码,然后再URL编码.       使用delphi编码的方法:加入待编码原始字符串

使用python对url编码解码

url中的query带有特殊字符(不是url的保留字)时需要进行编码. 当url中带有汉字时,需要特殊的处理才能正确编码,以下都只针对这种情形,当然也适用于纯英文字符的url. (1) url编码: import urllib url = 'http://test.com/s?wd=哈哈' url = url.decode('gbk', 'replace') print urllib.quote(url.encode('utf-8', 'replace')) 结果: http%3a%2f%2ft

url 编码解码

from urllib import parse#url编码url = 'http://www.baidu.com?query = python基础教程'url_str = parse.quote_plus(url) #quote 跟quote_plus一样的,后者更牛逼,把汉字变成url编码print(url_str) #http%3A%2F%2Fwww.baidu.com%3Fquery+%3D+python%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B#url解码