7Python标准库系列之requests模块

Python标准库系列之requests模块


Requests is the only Non-GMO HTTP library for Python, safe for human consumption.

官方文档:http://docs.python-requests.org/en/master/


安装Requests模块

Requests模块官方提供了两种方式安装:

pip方式安装

1
pip install requests

源码方式安装

1
2
3
git clone git: / / github.com / kennethreitz / requests.git
cd requests
python setup.py install

验证是否安装成功

进入python解释的,导入模块试试,如果导入成功则安装成功,否则就需要检查那里执行错误了呢。

1
2
3
4
C:\Users\anshengme> python
Python  3.5 . 1  (v3. 5.1 : 37a07cee5969 , Dec   6  2016 01 : 54 : 25 ) [MSC v. 1900  64  bit (AMD64)] on win32
Type  "help" "copyright" "credits"  or  "license"  for  more information.
>>>  import  requests

环境准备

安装gunicornhttpbin

1
sudo pip3 install gunicorn httpbin

启动一个gunicornServer

1
2
3
4
5
   sudo gunicorn httpbin:app
[ 2016 - 10 - 27  11 : 45 : 08  + 0800 ] [ 12175 ] [INFO] Starting gunicorn  19.6 . 0
[ 2016 - 10 - 27  11 : 45 : 08  + 0800 ] [ 12175 ] [INFO] Listening at: https: / / blog.ansheng.me: 8000  ( 12175 )
[ 2016 - 10 - 27  11 : 45 : 08  + 0800 ] [ 12175 ] [INFO] Using worker: sync
[ 2016 - 10 - 27  11 : 45 : 08  + 0800 ] [ 12178 ] [INFO] Booting worker with pid:  12178

打开浏览器输入``将会得到以下页面,相当于在本地启动一个http server便于学习requests模块

wKiom1kZEOSQbUI3AACSiuo4Ouk316.png

简单的一个requests小程序

下面的一个小程序会通过requests请求'https://blog.ansheng.me:8000/ip'这个URI链接,获取到对应的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/use/bin/env python3
# _*_ coding:utf-8 _*_
import  requests
 
URL_IP  =  '
  
def  use_params_requests():
     # 参数
     params  =  { 'params1' 'Hello' 'params2' 'World' }
     # 发送请求
     response  =  requests.get(URL_IP, params = params)
     print ( "响应的状态码:" , response.status_code, response.reason)
     print ( "返回的头部:" , response.headers)
     print ( "把返回的数据转换为json:" , response.json())
     print ( "响应的文本:" , response.text)
     
if  __name__  = =  '__main__' :
     use_params_requests()

发送请求

通过GITHUB提供的API获取用户信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/use/bin/env python3
# _*_ coding:utf-8 _*_
import  requests
import  json
 
URL  =  '
  
def  build_uri(endpoint):
     return  '/' .join([URL, endpoint])
     
def  better_print(json_str):
     return  json.dumps(json.loads(json_str), indent = 4 )
     
def  request_method():
     # 获取用户的所有信息
     response  =  requests.get(build_uri( 'users/anshengme' ))
     print (better_print((response.text)))
     
     print ( "\n" )
     
     # 获取用户的邮箱
     response  =  requests.get(build_uri( 'user/emails' ), auth = ( "anshengme.com@gmail.com" "xxxxxx" ))
     print (better_print((response.text)))
     
if  __name__  = =  '__main__' :
     request_method()

带参数的请求

1
2
3
4
5
6
7
8
9
10
11
# 使用params传参
def  params_request():
     response  =  requests.get(build_uri( 'users' ), params = { 'since' 11 })
     print (better_print(response.text))
     print (response.request.headers)
     print (response.url)
     
# 使用json传参方式
def  json_request():
     response  =  requests.get(build_uri( 'user' ), auth = ( "username" "email" ), json = { "name" "asdas" })
     print (better_print(response.text))

异常处理

1
2
3
4
5
6
7
8
9
def  timeout_request():
     try :
         response  =  requests.get(build_uri( 'user/emails' ), timeout = 10 )
         response.raise_for_status()
     except  Exception as e:
         print (e)
     else :
         print (response.text)
         print (response.status_code)

自定义request

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from  requests  import  Request, Session
 
def  hard_request():
     =  Session()
     # 创建请求
     headers  =  { 'User-Agent' 'fake1.3.4' }
     req  =  Request( 'GET' , build_uri( 'user/emails' ), auth = ( 'anshengme.com@gmail.com' 'xxxxxx' ), headers = headers)
     prepped  =  req.prepare()
     print ( "请求头》》" , prepped.headers)
     # 发送请求
     resp  =  s.send(prepped)
     print (resp.status_code)
     print (resp.request.headers)
     print (resp.text)

实例

下载图片/文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/use/bin/env python3
# _*_ coding:utf-8 _*_
import  requests
from  contextlib  import  closing
 
# 流传输的模式
def  download_img():
     url  =  "http://www.sinaimg.cn/IT/cr/2016/0331/725124517.jpg"
     # headers = {
     #     'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}
     # response = requests.get(url, headers=headers, stream=True)
     response  =  requests.get(url, stream = True )
     print (response.status_code, response.reason)
     
     with  open ( 'github.jpg' 'wb' ) as fd:
         for  chunk  in  response.iter_content( 128 ):
             fd.write(chunk)
             
def  download_img_improved():
     url  =  "http://www.sinaimg.cn/IT/cr/2016/0331/725124517.jpg"
     with closing(requests.get(url, stream = True )) as response:
         # 打开并写入文件
         with  open ( 'github1.jpg' 'wb' ) as fd:
             for  chunk  in  response.iter_content( 128 ):
                 fd.write(chunk)
                 
download_img()
download_img_improved()

处理响应的事件钩子

1
2
3
4
5
6
7
8
9
10
11
12
#!/use/bin/env python3
# _*_ coding:utf-8 _*_
import  requests
 
def  get_key_info(response,  * args,  * * kwargs):
     print (response.headers[ "Content-Type" ])
     
def  main():
     requests.get( "https://www.baidu.com" , hooks = dict (response = get_key_info))
     
if  __name__  = =  "__main__" :
     main()









本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/1925733,如需转载请自行联系原作者
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值