Python Requests学习笔记

转载自己之前的一篇文章

Python的Requests库支持

get put delete head options

的http请求 这些内置的请求可以完全满足我们的需求 而且引用是十分简单的

r = requests.get('http://baidu.com')

r = requests.put

r = requests.delete

r = requests.head

r = requests.options

这样就可以完成一个简单的http请求 简直方便至极~(Python大法保好啊) 我们进行一个很简单的POST

payload = {'username': 'admin','password':'admin'}

r = requests.post("http://www.c-chicken.cc/admin/index.php", data = payload)

如果get要带上参数 也和post一样

payload = {'id':'1'}

r = requests.get("http://www.baidu.com/index.php", params = payload)

简单的获取返回内容

r.text #获取响应内容

r.content #获取响应内容

r.headers #获取响应的Http头 返回是字典的格式 所以可以通过 headers[‘content-length’] 获得一些更具体想得到的

r.json #获得json格式数据 可以import json进行下一步的数据转化

r.history #获得跳转过程中发生的操作

r.status_code #获得返回的状态码

r.cookies #快速获取Cookies

补充的内容

  • 关于编码

当返回文本编码乱码之后

我们可以print r.encoding看看编码是啥

然后使用 r.encoding = ‘xxx’进行更改

print r.encoding

urf-8

r.encoding = 'ISO-8859-1'
  • 关于响应码

Requests还附带了一个内置的访问页面是否正确的方法:

 r.status_code==requests.codes.ok  
 True

如果发送了一个失败请求(非200响应),我们可以通过 Response.raise_for_status() 来抛出异常:

>>> bad_r=requests.get('http://httpbin.org/status/404')

>>> bad_r.status_code404

>>> bad_r.raise_for_status()

Traceback 

(most recent call last):   File "requests/models.py", line 832,

 in raise_for_statusraisehttp_errorrequests.exceptions.

HTTPError: 404

 Client Error
  • 关于超时

Requests可以自己定义时长 这在扫目录的时候十分有用

r = requests.get('http://github.com',timeout=0.001)

如果时长超过所给的限定 就会抛出错误

  • 维持会话

    s=requests.Session()
    payload = {'username':'admin','password':'admin'}
    r = s.post("http://www.c-chicken.cc/admin/index.php", data=payload)
    r = s.get('http://www.c-chicken.cc/admin/edit.php?id=1')
    
  • 定制请求头

    headers = {'Cookies': 'xxxx'}
    
    r = requests.get('http://www.baidu.com', headers=headers)
    
  • 上传文件

    files = {'file' : open('report.xls', 'rb')}
    
    r = requests.post(url, files=files)
    
  • 使用代理

    proxies = {
      "http": "http://10.10.1.10:3128",
      "https": "http://10.10.1.10:1080",
    }
    
    r = requests.get("http://example.org", proxies=proxies)
    
  • 如果代理需要HTTP Basic Auth的话

    proxies = {

    "http": "http://user:pass@10.10.1.10:3128/",
    

    }

    r = requests.get("http://example.org", proxies=proxies)
    
  • 一个扫描IISPUT的栗子

    ScanPut = requests.options('http://127.0.0.1')
    
    Options = ScanPut.headers['allow']
    
    if "PUT" in Options:
    
        print "%s Can Put" % url
    
  • 关于HTTPBasicAuth

    requests.get('https://api.github.com/user', auth=('user', 'pass'))  
    

这个完全可以用爆破Tomcat~

  • SSL证书验证

    requests.get('https://zhifubao.com', verify=True)
    

自己指定证书

requests.get('https://zhifubao.com', cert=('/path/server.crt', '/path/key'))
  • 重定向与请求历史

默认情况下,除了 HEAD, Requests会自动处理所有重定向。

可以使用响应对象的 history 方法来追踪重定向。

也可以拒绝重定向

r = requests.get('http://baidu.com', allow_redirects=False)

Mark一下 吊吊的Python库

comments powered by Disqus