
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 requestsdef 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")# urlurl = 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# jsonjson_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 = headerscookies = cookies# web客户端验证auth = auth# auth = (账户名, 密码)# auth=('test', '123456')# 超时,单位秒,stimeout = 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) # 查看响应码# Cookiescookiejar = 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方法失败")raisedef 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)# Cookiescookiejar = 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'}returnexcept:print("run方法失败")raise# 钩子函数def ResponseHook(res, *args, **kwargs):print('url', res.url)# return # 不能返回有意义的数据哦!if __name__ == "__main__":REQ(url,method) # 普通请求# REQ_sess() # session对象