前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python的requests库和url

python的requests库和url

作者头像
py3study
发布2020-01-09 16:51:32
5690
发布2020-01-09 16:51:32
举报
文章被收录于专栏:python3python3

python中有多种库可以用来处理http请求,比如python的原生库:urllib包、requests类库。urllib和urllib2是相互独立的模块,python3.0以上把urllib和urllib2合并成一个库了,requests库使用了urllib3。requests库的口号是“HTTP For Humans”,为人类使用HTTP而生,用起来不知道要比python原生库好用多少呢,比起urllib包的繁琐,requests库特别简洁和容易理解。话不多说,代码为证~~~

下面我们来分别使用urllib包和requests库写一个get请求,进行一下对比,如下图:

  1. #-*- coding:utf8 -*-
  2. import urllib2
  3. import urllib
  4. URL_GET = "https://api.douban.com/v2/event/list"
  5. def use_params_urllib2():
  6. #构建请求参数
  7. params = urllib.urlencode({'loc':'108288','day_type':'weekend','type':'exhibition'})
  8. print 'Request Params:'
  9. print params
  10. #发送请求
  11. response = urllib2.urlopen('?'.join([URL_GET,'%s'])%params)
  12. #处理响应
  13. print '>>>>>>Response Headers:'
  14. print response.info()
  15. print 'Status Code:'
  16. print response.getcode()
  17. print'>>>>>>>Response Body:'
  18. print response.read()
  19. if __name__ == '__main__':
  20. print 'Use params urllib2:'
  21. use_params_urllib2()
  22. #-*- coding:utf8 -*-
  23. import requests
  24. URL_GET = "https://api.douban.com/v2/event/list"
  25. def use_params_requests():
  26. #构建请求参数
  27. params = {'loc':'108288','day_type':'weekend','type':'exhibition'}
  28. #发送请求
  29. response = requests.get(URL_GET,params=params)
  30. #处理响应
  31. print '>>>>>>Response Headers:'
  32. print response.headers
  33. print '>>>>>>Status Code:'
  34. print response.status_code
  35. print'>>>>>>>Response Body:'
  36. print response.text
  37. if __name__ == '__main__':
  38. print 'Use params requests:'
  39. use_params_requests()

第一种使用的是urllib包,第二种使用的是requests库,从以下几个方面进行对比:

1)构建参数:在构建请求参数时,第一种需要将请求参数使用urllib库的urlencode方法进行编码预处理,非常麻烦

2)请求方法:发送get请求时,第一种使用的urllib库的urlopen方法打开一个url地址,而第二种直接使用requests库的get方法,与http请求方式是对应的,更加直接、易懂

3)请求数据:第一种按照url格式去拼接一个url字符串,显然非常麻烦,第二种按顺序将get请求的url和参数写好就可以了

4)处理响应:第一种处理消息头部、响应状态码和响应正文时分别使用.info()、.getcode()、.read()方法,第二种使用.headers、.status_code、.text方法,方法名称与功能本身相对应,更方便理解、学习和使用

5)连接方式:看一下返回数据的头信息的“connection”,使用urllib库时,"connection":"close",说明每次请求结束关掉socket通道,而使用requests库使用了urllib3,多次请求重复使用一个socket,"connection":"keep-alive",说明多次请求使用一个连接,消耗更少的资源

6)编码方式:requests库的编码方式Accept-Encoding更全,在此不做举例

POST请求

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import requests

import json

url = 'http://official-account/app/messages/group'

body = {"type": "text", "content": "测试文本", "tag_id": "20717"}

headers = {'content-type': "application/json", 'Authorization': 'APP appid = 4abf1a,token = 9480295ab2e2eddb8'}

#print type(body)

#print type(json.dumps(body))

# 这里有个细节,如果body需要json形式的话,需要做处理

# 可以是data = json.dumps(body)

response = requests.post(url, data = json.dumps(body), headers = headers)

# 也可以直接将data字段换成json字段,2.4.3版本之后支持

# response  = requests.post(url, json = body, headers = headers)

# 返回信息

print response.text

# 返回响应头

print response.status_code

本文出自https://blog.csdn.net/github_36032947/article/details/78343573?locationNum=5&fps=1

参考Python——深入理解urllib、urllib2及requests(requests不建议使用?)

链接 http://www.mamicode.com/info-detail-1224080.html

Python+Requests接口测试教程(2):requests

http://www.bubuko.com/infodetail-2292393.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档