#--Name: Requests库详解
0x00 什么是Requests?
Request是用Python语音编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库.
比urllib更方便,节省大量的工作,完全满足HTTP测试需求
总而言之---Python实现的简单易用的HTTP库
0x01 Install It
pip install requests
安装完成后,使用下面的命令验证安装是否成功
import requests
0x02 实例
#实例1: 使用requests的相关方法操作
import requests
response = requests.get('https://www.baidu.com')
print(type(response))
print(response.status_code)
print(type(response.text))
print(response.cookies)
#实例2: 各种请求方式
import requests
requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.get('http://httpbin.org/get')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')
0x03 请求部分
#基本GET请求
#基本写法:
import requests
response = requests.get('http://httpbin.org/get')
print(requests.text)
#带参数的GET请求
import requests
response = requests.get('http://httpbin.org/get?name=germey&age=22')
print(response.text)
#构造GET请求参数
import requests
data = {
'name':'germey',
'age':22
}
response = requests.get('http://httpbin.org/get",params = data)
print(response.text)
#解析JSON
import requests
import json
response = requests.get('http://httpbin.org/get')
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json()))
#获取二进制数据
import requests
response = request.get('https://github.com/favicon.ico')
print(type(response.text),type(response.content))
print(response.text)
print(response.content)
#获取二进制数据并写入文件
import requests
response = request.get('https://github.com/favicon.ico')
with open('favicon.ico','wb') as f:
f.write(response.content)
f.close()
#添加headers
#未添加headers,该url返回报错
import rquests
response = requests.get('https://www.zhihu.com/explore')
print(response.text)
#添加headers
import requsts
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'
}
response = requests.get('https://www.zhihu.com/explore',headers = headers)
print(response.text)
#基本POST请求
import requests
data = {'name':'germey','age':'22'}
response = requests.post('http://httpbin.org/post',data=data)
print(response.text)
#带有headers的POST请求
import requests
headers = {
'User-Agent':'Ruby'
}
data = {'name':'germey','age':'22'}
response = requests.post('http://httpbin.org/post',data=data,headers=headers)
print(response.text)
#响应部分
#response 属性
import requests
response = requests.get('https://www.baidu.com')
print(type(response.status_code),response.status_code)
print(type(response.headers),response.headers)
print(type(response.cookies),response.cookies)
print(type(response.url),response.url)
response = requests.get('http://www.jd.com')
print(type(response.history),response.history)
#状态码的判断
#判断状态码是否是 ok,也就是http 200 ok
import requests
response = requests.get('https://www.baidu.com')
#exit() if not response.status_code == requests.codes.ok else print('网站正常')
if not response.status_code == requests.codes.ok:
exit()
else:
print('网站正常')
#判断状态码是否等于200,同上
import requests
response = requests.get('http://www.jianshu.com')
exit() if not response.status_code == 200 else print('Request Successfully')
#requests 的高(gao)级(ji)操作
#文件上传
import reqeusts
files = {'file':open('favicon.ico','rb)}
response = requests.post('http://httpbin.org/post',files=files)
print(response.text)
#获取Cookie
import requests
response = requests.get('https://www.baidu.com')
print(response.cookies)
for key,value in response.cookies.items():
print(key + '=' + value)
#会话维持 模拟登陆
#用例1: 未使用Session对象
import requests
requests.get('http://httpbin.org/cookies/set/number/123456789')
response = requests.get('http://httpbin.org/cookies')
print(response.text)
#用例2: 使用session对象
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
response = requests.get('http://httpbin.org/cookies')
print(response.text)
#证书验证
#requests打开https的时候,判断证书是否是合法的,12306的证书是非法的,那么
#我们使用常规的方法是无法访问的
import requests
response = requests.get('https://www.12306.cn/')
print(response.status_code)
#用例2: 不使用证书访问https
import requests
response = requests.get('https://12306.cn',verify=False)
print(response.status_code)
#用例3: 使用证书 使用指定证书和密钥
import requests
response = requests.get('https://12306.cn',cert=('/path/server.crt','/path/key'))
print(requests.status_code)
#有关于代理的使用
#单一代理设置
import requests
proxies = {
'http':'http://127.0.0.1:9991',
'https':'https://127.0.0.1:9991'
}
response = requests.get('https://www.taobao.com',proxies=proxies)
print(response.status_code)
#用例2: 带用户名密码的代理设置
import requests
proxies={
'http':'http://user:password@127.0.0.1:9991'
}
response = requests.get('https://www.taobao.com',proxies=proxies)
print(response.status_code)
#用例3: 使用Socks代理
pip install requests[socks]
import requests
proxies = {
'http':'socks5://127.0.0.1:×××',
'https':'socks5://127.0.0.1:×××'
}
response = requests.get('https://www.taobao.com',proxies=proxies)
print(response.status_code)
#超时设置
import requests
response = requests.get('https://www.taobao.com',timeout = 1)
print(response.status_code)
#认证设置
#对于认证页面,需要使用认证方式
#用例1: 未设置认证值
import requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://127.0.0.1:1111')
print(r.status_code)
#用例2: 设置认证值
import requests
from requests.auth import HTTPDigestAuth
r = requests.get('http://192.168.16.1',auth=HTTPDigestAuth('aaa','123456'))
print(r.status_code)
#异常处理
import requests
from requests.exceptions import ReadTimeout,HTTPError,RequestException
try:
response = requests.get('http://httpbin.org/get',timeout = 0.1)
print(response.status_code)
except ReadTimeout:
print('Time Out!!!')
except HTTPError:
print('HTTP Error!!!')
except RequestException:
print('Error!!!')