python模块-requests

概述

requests是python中热门的模块,它封装了python底层的库,并且更加容易使用。在python爬虫中非常常见的使用这个框架作为其请求的发送,这里记录其部分常见用法。

requests

安装

1
pip install reqeusts

简单使用

POST请求

x-www-form-urlencode
1
2
3
4
5
data={
"xx":"yy",
"aa":"bb"
}
r = requests.post("http://www.posturl.com",data=data)
json
1
2
json="{'type':'post','age':123}"
r = requests.post(url,data=json)

GET

1
2
3
4
headers={
"user-agent":'xxxx',
}
r=requests.get(url,headers=headers)

高级使用

有时候某些场景会出现SSL错误,我们需要禁用

1
2
3
4
from urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)

requests.api.request('post', url, data={'bar':'baz'}, json=None, verify=False)

我们需要session来保持网站的连接

1
2
session = requests.session()
response = session.get(url)

上传文件模拟

1
2
3
4
5
>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}

>>> r = requests.post(url, files=files)
>>> r.text

response.text 和 response.content

1
2
text是正常的字符流
content是二进制的字节流,常用于图片的传输

例子

结合unittest做API测试框架

1
2
pip install html-testRunner
pip install requests

代码

1
2
3
4
5
6
7
8
9
10
11
import HtmlTestRunner
import unittest
import requests
class TestPyRequest(unittest.TestCase):
  def setUp(self):
    self.url = 'https://api.douban.com'
  def test_douban_api(self):
    r = requests.get(self.url+'/v2/movie/top250',verify=False)
    self.assertTrue(r.status_code,200)
if __name__ == '__main__':
  unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='.'))

以上我们就完成了一个以requests发送请求,以html-testRunner生成report,unittest作为验证断言的api框架,(以上代码只为简略的演示。)

reference

http://docs.python-requests.org/zh_CN/latest/