简介
urllib模块的简化版
requests 是用 python 语言基于 urllib 编写,用于网络HTTP解析或操作
文档查询
https://requests.readthedocs.io/en/latest/
安装
pip install requests
了解
Request支持HTTP连接保持和连接池,
支持使用cookie保持会话,支持文件上传,
支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。
requets与urllib2区别
-
urllib 相对复杂
-
requests 简化操作
参数列表
响应公共方法 | ||
text | 返回html的内容 | 以encoding解析返回的内容. 字符串方式的响应体, 根据响应头部的字符编码进行解码 |
content | 返回2进制形式的内容 | 以字节形式(二进制)返回. 字节方式的响应体. 自动解码gzip和deflate压缩 |
encoding | 当前网页编码 | 设置编码:encoding='utf-8' |
decode | 解码 | 【例子】 decode("utf-8") 【常见类型】 utf-8 / gbk / gbk2312 / iso-8859 / ascii |
apparent_encoding | 自动判断编码 | |
status_code | 获取网页状态码 | |
headers | 存储服务器响应头 | 若键不存在则返回None, 获取html编码类型: headers['content-type'] |
cookies | 返回cookie信息 | |
raise_for_status() | 抛出异常 | 失败请求(非200响应)抛出异常 |
json() | 返回json | Requests中内置的JSON编码器, 非json解析出错会抛异常 |
close() | 关闭连接 | 关闭与服务器的连接 |
next | 下一个请求 | 返回重定向链中下一个请求的 PreparedRequest 对象 |
方法 | ||
get() | 请求 | 【语法】 get(url,header,data,proxies(使用ip代理),...) |
post() | 发送 | 【语法】 post(url,header,data,proxies(使用ip代理),...) |
head() | 获取响应报告 | 获取头部信息 |
put() | 请求向URL位置存储一个资源,覆盖原URL位置的资源。 | |
patch() | 请求局部更新URL位置的资源,即改变该处资源的部分内容。 | |
delete() | 请求删除URL位置存储的资源 |
携带参数 | |
data | 设置请求体,用于post请求 |
params | URL传递参数,用于get请求 |
json | 为了方便请求而提供的参数,相当于data |
headers | HTTP请求中的头部,它是一个字典 |
cookies | 是所携带的 Cookie ,它可以是一个字典或者 CookieJar 的实例 |
files | 是要上传的文件,它可以是一个字典,字典的内容是tuple |
auth | 用于开启HTTP请求的认证 |
timeout | 超时时间 【语法】 timeout =(单位/秒) |
allow_redirects | 是否允许重定向,一个布尔值 |
proxies | 使用ip代理 |
verify | 是否检查服务端的证书,传布尔值或者CA的路径 |
stream | 是布尔值,代表是否以流的方式读取结果 |
cert | 传入客户端的SSL证书 |
参考代码
简单的请求
import requests
''' 地址 '''
u = 'https://www.xxx.com'
''' 携带请求头参数模拟浏览器请求 '''
h = {'user-agent':'xxx'}
''' 字段查询 '''
p = {'查询字段1': '值1', '查询字段2': '值2'}
response = requests.get(url=u,headers=h,params=p)
print(response.text)
网页状态码查看
import requests
url='site address'
response=requests.get(url)
response.status_code
# >>>>>> 200
response.headers['content-type']
# >>>>>> 'text/html;charset=utf-8'
获取 HTML 网页头信息
import requests
url = "site address"
res = requests.head(url)
# 打印请求头信息
print(res.headers)
IP代理使用
import requests
'''
如果发送的是http请求,就使用http请求的代理,
如果发送的是https请求,就使用一个https请求的代理
'''
proxies={
http:'http://174.14.209.180:27829',
https:'https://111.10.200.100:23456',
}
# 如果代理需要用户名和密码,则需要这样:
proxies = {
'http': 'http://user:pass@10.10.1.10:3128/',
}
response = requests.get('https://www.xxx.com/', proxies=proxies)
print(response.text)
异常处理(请求超时)
import requests
from requests.exceptions import Timeout
try:
response = requests.get(url, timeout=5)
print('响应正常,执行下一步')
except Timeout as e:
print("请求超时:", str(e))
异常处理(连接失败)
import requests
from requests.exceptions import ConnectionError
try:
response = requests.get(url)
print('响应正常,执行下一步')
except ConnectionError as e:
print("连接错误:", str(e))
异常处理(状态码)
import requests
from requests.exceptions import HTTPError
try:
response = requests.get(url)
response.raise_for_status()
print('响应正常,执行下一步')
except HTTPError as e:
print("HTTP错误:", str(e))
异常处理(所有异常)
import requests
from requests.exceptions import RequestException
try:
response = requests.get(url)
print('响应正常,执行下一步')
except RequestException as e:
print("请求发生异常:", str(e))
文件上传
import requests
''' 上传文件,文件类型会自动处理 '''
url = 'http://127.0.0.1:8080/upload'
files = {
'file': open('/home/rxf/test.jpg', 'rb')
}
'''
files = {
'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))
}
'''
r = requests.post(url, files=files)
print(r.text)
''' request更加方便的是,可以把字符串当作文件进行上传 '''
url = 'http://127.0.0.1:8080/upload'
files = {
'file': ('test.txt', b'Hello Requests.')
}
r = requests.post(url, files=files)
print(r.text)
身份认证
import requests
from requests.auth import HTTPBasicAuth
''' 基本身份认证(HTTP Basic Auth) '''
r = requests.get(
'https://httpbin.org/hidden-basic-auth/user/passwd',
auth=HTTPBasicAuth('user', 'passwd')
# auth=('user', 'passwd') # 可忽略
)
'''
print(r.json())
'''
简单身份认证
另一种非常流行的HTTP身份认证形式是摘要式身份认证,
Requests对它的支持也是开箱即可用的
'''
requests.get(URL, auth=HTTPDigestAuth('user', 'pass')
Cookie认证
import requests
''' 1、首先登陆任何页面,获取cookie '''
i1 = requests.get(url='http://xxx.com/help/service')
i1_cookies = i1.cookies.get_dict()
''' 2、用户登陆,携带上一次的cookie,后台对cookie中的 gpsd 进行授权 '''
i2 = requests.post(
url='http://xxx.com/login',
data={
'phone': '8615131255089',
'password': 'xxooxxoo',
'oneMonth': ''
},
cookies=i1_cookies
)
''' 3、点赞(只需要携带已经被授权的gpsd即可) '''
gpsd = i1_cookies['gpsd']
i3 = requests.post(
url='http://xxx.com/link/vote?linksId=8589523',
cookies={'gpsd': gpsd}
)
print(i3.text)
Session认证
import requests
session = requests.Session()
i1 = session.get(url='http://xxx.com/help/service')
i2 = session.post(
url='http://xxx.com/login',
data={
'phone': '8615131255089',
'password': 'xxooxxoo',
'oneMonth': ''
}
)
i3 = session.post(
url='http://xxx.com/link/vote?linksId=8589523'
)
print(i3.text)