当前位置: 首页 > 工具软件 > Requests > 使用案例 >

Requests库与response属性

解翰采
2023-12-01

一、安装

requests是Python第三方库,不会自带,需要额外安装

pip install requests

二、原理

模拟浏览器,向服务器发送请求,获得服务器响应结果

三、 方法

1. requests库的几个主要方法

序号方法说明
1requests.request()构造一个请求,最基本的方法,是下面方法的支撑
2requests.get()获取网页,对应HTTP中的GET方法
3requests.head()获取HTML网页的头信息,对应HTTP中的HEAD方法
4requests.post()向网页提交数据,对应HTTP中的POST方法
5requests.put()向网页提交资源,对应HTTP中的PUT方法
6requests.patch()向HTML网页提交局部修改的请求,对应HTTP中的PATCH方法
7requests.delete()向HTML提交删除请求,对应HTTP中的DELETE方法
8requests.Session()获取服务器会话

1.1 requests.request方法

requests.request(method, url, **kwargs)

(1). method - 请求方式

序号方式含义
1‘GET’请求获取URL位置的资源
2‘HEAD’请求获取URL位置资源的响应消息报告,即获得资源的头部信息
3‘POST’请求向URL位置的资源附加新的消息
4‘PUT’请求向URL位置存储一个资源,覆盖原URL位置的资源
5‘PATCH’请求局部更新URL位置的资源,即改变该处资源部分内容
6‘DELETE’请求删除URL位置存储的资源

以上1与2,是从服务器获取信息到本地
而3、4、5和6,是从本地向服务器提交信息

通过URL和命令管理资源,操作独立无状态,网络通道及服务器成了黑盒子。
(2). url - 待操作页面的主链接
(3). **kwargs - 访问控制参数(可选)

序号方式使用对象说明
1params=字典或字节序列向服务器请求数据时使用,作为参数增加到请求网址-url后部分中
2data=字典、字节序列或文件对象向服务器提交数据时使用,data的内容因安全问题,不会直接放在URL链接里,而是放在请求体内
3json=JSON格式的数据和data类似,作为请求体向服务器提交
4headers=字典为HTTP定制请求头。可定制User-Agent和Cookie等请求头信息,模拟浏览器内核等
5cookies=字典或者cookieJar为HTTP定制cookie
6auth=元组HTTP认证功能
7files=字典用于传输文件,存放到相应的URL上
8timeout=float或(start,end)设定超时时间,在这个时间内没有返回结果,则抛出timeout异常
9proxies=字典分别为HTTP和HTTPS设定代理服务器,这样我们访问网页使用的IP地址就是代理服务器的IP地址,防止逆追踪。可增加登录认证
10allow_redirects=布尔型默认为1,表示是否允许重定向
11steam=布尔型默认为1,表示是否允许对获取的内容进行立即下载
12verify=布尔型默认为1,认证SSL证书开关
13cert=元组本地SSL证书路径

举例:

  1. params
kw = {'sort': 'U', 'range': '0,10', 'tags':'2020,青春'}

response = requests.request('GET', 'https://movie.douban.com/tag/#/', params=kw)
  1. data
kw = {'name': 'Li', 'age': '22'}

response = requests.request('POST',"http://httpbin.org/post", data=kw)
  1. json
kw = {'name': 'Li', 'age': '22'}

response = requests.request('POST',"http://httpbin.org/post", json=kw)
  1. headers
kw = {'name': 'Li', 'age': '22'}

headers = {"Cookie":"BAIDUID......","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"}

response = requests.request('POST',"http://httpbin.org/post", json=kw,headers=headers)
  1. cookies
r = requests.request('GET', 'https://www.baidu.com')
cookie = r.cookies
type(cookie)
# requests.cookies.RequestsCookieJar

kw = {'name': 'Li', 'age': '22'}
response = requests.request('POST',"http://httpbin.org/post",data=kw, cookies=cookie)
  1. auth
import requests
# 最简单的http验证
from requests.auth import HTTPBasicAuth

r = requests.request('GET','http://httpbin.org/auth', auth=HTTPBasicAuth('user', 'user'))
# r = requests.get('http://httpbin.org/auth', auth=HTTPBasicAuth('user', 'user'))
# r = requests.get('http://httpbin.org/auth', auth=('user', 'user'))

print(r.status_code)
  1. file
fs = {file: open('data.xls', 'rb')}

r = requests.request('POST','http://httpbin.org/post',files=fs)
  1. timeout
import requests
from requests.exceptions import ReadTimeout

try:
  # 设置必须在500ms内收到响应,不然或抛出ReadTimeout异常
  response = requests.get("http://httpbin.org/get", timeout=0.5)
           print(response.status_code)
except ReadTimeout:
  print('Timeout')
  1. proxies
import requests

#普通代理
proxies = {
   "http": "http://127.0.0.1:1080",
   "https": "https://127.0.0.1:1080",
}
# 往请求中设置代理(proxies)
r = requests.get("https://www.taobao.com", proxies=proxies)
print(r.status_code)

# 带有用户名和密码的代理
proxies = {
   "http": "http://user:password@127.0.0.1:9743/",
}
r = requests.get("https://www.taobao.com", proxies=proxies)
print(r.status_code)

# 设置socks代理
proxies = {
   'http': 'socks5://127.0.0.1:1080',
   'https': 'socks5://127.0.0.1:1080'
}
r = requests.get("https://www.google.com", proxies=proxies)
print(r.status_code)

常用免费代理网站:
全网代理IP
无忧代理

  1. allow_redirects
    True/False,默认为True,重定向开关
r = requests.request('GET','http://httpbin.org/get',allow_redirects=False)
  1. stearm
    True/False,默认为True,获取内容立即下载开关
r = requests.request('GET','http://httpbin.org/get/**.txt',stream=False)
  1. verity
    True/False默认Ture,认证ssl证书开关
# 无证书访问
r = requests.get('https://www.12306.cn')
# 在请求https时,request会进行证书的验证,如果验证失败则会抛出异常
print(r.status_code)


# 关闭验证,但是仍然会报出证书警告
r = requests.get('https://www.12306.cn',verify=False)
print(r.status_code)

# 消除关闭证书验证的警告
from requests.packages import urllib3

# 关闭警告
urllib3.disable_warnings()
r = requests.get('https://www.12306.cn',verify=False)
print(r.status_code)
  1. cert
    本地ssl证书路径
# 设置本地证书
r = requests.get('https://www.12306.cn', cert=('/home/youdi/Download/**.crt', '/hone/youdi/.ssh/**.key'))
print(r.status_code)

1.2 requests.get方法

requests.get(url, params=None, **kwargs)

(1). url - 待获取页面的主链接
(2). params - 字典或字节流格式,可选
(3). **kwargs - 除params外,剩余12个可选字段

1.3 requests.head方法

requests.get(url, params=None, **kwargs)

(1). url - 待获取页面的主链接
(2). **kwargs - 13个可选字段

1.4 requests.post方法

requests.get(url, data=None,json=None, **kwargs)

(1). url - 待更新页面的主链接
(2). data- 字典、字节流或文件,请求体中
(3). json- JSON格式数据,请求体中
(4). **kwargs - 除data和json外,剩余11个可选字段

1.5 requests.put方法

requests.get(url, data=None, **kwargs)

(1). url - 待更新页面的主链接
(2). data- 字典、字节流或文件,请求体中
(2). **kwargs - 除data外,剩余12个可选可选字段

1.6 requests.patch方法

requests.get(url, data=None, **kwargs)

(1). url - 待更新页面的主链接
(2). data- 字典、字节流或文件,请求体中
(2). **kwargs - 除data外,剩余12个可选可选字段

1.7 requests.delete方法

requests.get(url, **kwargs)

(1). url - 待删除页面的主链接
(2). **kwargs - 13个可选字段

使用request一个方法,修改它的method值并给定对应的参数,和使用其他六个方法的效果是一样的。

1.8 requests.Session方法

session = requests.Session()
session.get(url)
session.post(url,data)

四、response的属性

response = requests.get(url, params)
response.url            返回请求URL
response.text			返回headers中的编码解析的结果,可以通过r.encoding='gbk'来变更解码方式
response.content		返回二进制结果
response.json			返回JSON格式,可能抛出异常
response.status_code	返回响应码 如200、404等
response.headers		请求头
response.cookies		返回RequestsCookieJar对象
response.history		返回以列表存储的请求历史记录
 类似资料: