Python 的 requests
库是一个简单易用的HTTP客户端,用于发送各种HTTP请求。它支持会话管理、持久连接、文件上传、Cookie处理等,并且可以自动处理JSON数据。requests
库的API设计直观,文档齐全,使得进行网页内容获取、API交互、网络调试等操作变得轻松。它广泛应用于数据抓取、网络服务测试和自动化脚本中,是Python网络编程中最受欢迎的库之一。
pip install requests
包名 | 中文名 | 释义 | url |
---|---|---|---|
requests==2.32.3 | / | / | |
├── certifi [required: >=2017.4.17, installed: 2024.8.30] | / | certifi 是 Python 的标准库,提供 Mozilla 可信任的 CA 证书集合。 | / |
├── charset-normalizer [required: >=2,<4, installed: 3.3.2] | / | charset-normalizer 是一个用于自动检测和规范化文本编码的 Python 库。它可以自动检测文本编码,然后将其转换为 Unicode 格式 | / |
├── idna [required: >=2.5,<4, installed: 3.10] | / | idna是Python库,用于处理国际化域名(IDN)的编码和解码。 | / |
└── urllib3 [required: >=1.21.1,<3, installed: 2.2.3] | / | urllib3是Python的HTTP客户端库,支持连接池、文件上传、长连接、HTTP/HTTPS等功能。 | 第三方库 - urllib3 - 请求库 |
有两种方法,看最后__main__
REQ(url,method) # 普通请求
# REQ_sess() # session对象
import requests
def REQ(url,method,params=None, data=None,headers=None, json_data=None, files=None, cookies=None,
auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None,stream=None, verify=None,cert=None):
try:
print("REQ")
# url
url = url
# 请求方式
method = method
# url ? 后的参数
params = params
# params = {'参数名1':'参数值1', '参数名2':'参数值2'}
# 传输的数据
data = data
# data = {"email":"111111111@163.com", "password":"111111111"}
# 使用application/form-urlencode 方式提交请求
# request.body的内容则为a=1&b=2
# json
json_data = json_data
# 使用application/json方式提交请求
# request.body的内容则为'{"a":1,"b":2}'
# 文件
files = files
# with open('xxx.jpg','rb') as f2:
# files = f2.read()
# 请求头
# headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
headers = headers
cookies = cookies
# web客户端验证
auth = auth
# auth = (账户名, 密码)
# auth=('test', '123456')
# 超时,单位秒,s
timeout = timeout
# 请求连接超时,会触发
# 读取超时,数据大超时,不会触发
# 重定向
allow_redirects = allow_redirects # True/False
# 有的url会自动跳转,所以可以用False来禁止跳转
# 代理
proxies = proxies
# 根据协议类型,选择不同的代理
# proxies = {
# "http": "http://11.11.11.11:1111",
# "https": "http://11.11.11.11:1111", }
# 私密代理, 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:
# proxy = { "http": "mr_mao_hacker:sffqry9r@11.111.111.111:11111" }
# 钩子函数
hooks = hooks
# hooks = {'response': ResponseHook}
# 捎带执行(钩上)某个自定义的方法
# 还可以定义ResponseHook()函数
# 分段下载
stream = stream
# stream = False # 关闭,默认
# stream = True # 开启
# 返回时验证证书
verify = verify
# 检测是否信任,有时候会看到一些警告的网站会报警告
# verify=True
# True 表示要验证,报错的话会:
# SSLError: ("bad handshake: Error([('SSL routines',
# 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
# 请求时加上证书
cert = cert
# cert=('/path/server.crt', '/path/key')
response = requests.request(method, url,
params=params,
data=data,
headers=headers,
cookies=cookies,
files=files,
auth=auth,
timeout=timeout,
allow_redirects=allow_redirects,
proxies=proxies,
hooks=hooks,
stream=stream,
verify=verify,
cert=cert,
json=json)
# 分段下载
# f = open("file_path", "wb")
# for chunk in response.iter_content(chunk_size=512): # 按照块的大小读取
# # for chunk in response.iter_lines(): # 按照一行一行的读取
# if chunk:
# f.write(chunk)
# response.close() # 关闭连接(因为分段链接没有断)
# 查看响应内容
print(response.text)
# response.text 返回的是Unicode格式的数据
# 查看响应内容
print(response.content)
# response.content返回的字节流数据
# 返回的是服务器响应数据的原始二进制字节流
# 可以用来保存图片等二进制文件
print(response.url) # 查看完整url地址
print(response.encoding) # 查看响应头部字符编码
print(response.status_code) # 查看响应码
# Cookies
cookiejar = response.cookies
# 返回CookieJar对象:
print(cookiejar)
# <RequestsCookieJar[<Cookie BAIDUID=6B3B3B9EAA4D5555F362C3946E555555:FG=1 for .baidu.com/>,
# <Cookie BIDUPSID=6B3B3B9EAA4D2718CA521FA514B1E03E for .baidu.com/>,
# <Cookie H_PS_PSSID=88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111 for .baidu.com/>,
# <Cookie PSTM=1122223333 for .baidu.com/>,
# <Cookie BDSVRTM=0 for www.baidu.com/>,
# <Cookie BD_HOME=1 for www.baidu.com/>]>
# 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print(cookiedict)
# {'BAIDUID': '6B3B3B9EAA4D5555F362C3946E555555:FG=1',
# 'BIDUPSID': '6B3A3B9ECC4D2718AC521AC222B1F03E',
# 'H_PS_PSSID': '88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111',
# 'PSTM': '1122223333',
# 'BDSVRTM': '0',
# 'BD_HOME': '1'}
return response
# 获得数据
# data = json.loads(data.text)
# print(data)
except:
print("run方法失败")
raise
def REQ_sess():
try:
print("REQ_sess")
# 数据
data = {"email":"111111111@163.com", "password":"111111111"}
# 请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
# 1. 创建session对象,可以保存Cookie值
ssion = requests.session()
# 2. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
ssion.post("http://www.renren.com/PLogin.do", data = data)
# 3. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = ssion.get("http://www.renren.com/1111111111/profile")
# 查看响应内容
print(response.text)
# response.text 返回的是Unicode格式的数据
# 查看响应内容
print(response.content)
# response.content返回的字节流数据
# 返回的是服务器响应数据的原始二进制字节流
# 可以用来保存图片等二进制文件
# 查看完整url地址
print(response.url)
# 查看响应头部字符编码
print(response.encoding)
# 查看响应码
print(response.status_code)
# Cookies
cookiejar = response.cookies
# 返回CookieJar对象:
print(cookiejar)
# <RequestsCookieJar[<Cookie BAIDUID=6B3B3B9EAA4D5555F362C3946E555555:FG=1 for .baidu.com/>,
# <Cookie BIDUPSID=6B3B3B9EAA4D2718CA521FA514B1E03E for .baidu.com/>,
# <Cookie H_PS_PSSID=88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111 for .baidu.com/>,
# <Cookie PSTM=1122223333 for .baidu.com/>,
# <Cookie BDSVRTM=0 for www.baidu.com/>,
# <Cookie BD_HOME=1 for www.baidu.com/>]>
# 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print(cookiedict)
# {'BAIDUID': '6B3B3B9EAA4D5555F362C3946E555555:FG=1',
# 'BIDUPSID': '6B3A3B9ECC4D2718AC521AC222B1F03E',
# 'H_PS_PSSID': '88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111',
# 'PSTM': '1122223333',
# 'BDSVRTM': '0',
# 'BD_HOME': '1'}
return
except:
print("run方法失败")
raise
# 钩子函数
def ResponseHook(res, *args, **kwargs):
print('url', res.url)
# return # 不能返回有意义的数据哦!
if __name__ == "__main__":
REQ(url,method) # 普通请求
# REQ_sess() # session对象