Requests模块
Requests模块介绍
• Requests: 让HTTP服务人类。
• Requests是基于urllib库,使用Python实现的简单易用的HTTP库,使用起来比urllib简洁很多。
• Requests在Python2 和Python3中通用,方法完全一样。
• Requests安装:
– pip install requests
Requests发送GET请求
• requests.get(url, [headers,] [ proxies] [params,] *args):模拟浏览器向目标主机发送get请求,返回response对象。
– url:服务器对应的地址。
– headers:HTTP请求中headers字段。
– proxies:设置代理IP地址。
– params:查询字符串。
参数使用 (1)
• headers:字典格式,可以为请求添加headers字段。
• timeout:超时参数,用于设置请求时间,当超过时间仍未获得响应时,会抛出异常(可以结合retrying模块一起使用)。
• verify:布尔类型,可以避免ssl证书安全问题。
headers = {
“User-Agent”:””,
“Cookie”:””,
“Referer”:””}
response = requests.get(url, headers=headers)
response = requests.get(url, timeout=5)
参数使用 (2)
• params:查询字符串,即带有参数的请求。
• cookie:字典类型,用来接收请求时的cookie信息。
kw = {"kw":"python"}
response = requests.get(url, params=kw)
cookies = {"cookie的name":"cookie的value"}
response = requests.get(url, cookies=cookies}
参数使用 (3)
• proxies:设置代理IP。
proxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.10:1080"
}
response = requests.get(url, proxies =proxies )
Requests发送POST请求
• requests.post(url,[data,] [headers,] [proxies,] *args):使用post
方式向目标发送请求。
– url:服务器对应的地址。
– data:请求时携带的数据。
– headers:HTTP请求中headers字段。
– proxies:设置代理IP地址。
参数使用
• data :请求时携带的表单数据,字典格式。
data = {"kw":"python"}
response = requests.post(url, data=data)
响应对象 (1)
• 使用requests发送请求后会获取一个响应对象response。
• 响应信息:
– response.headers 获取响应头信息。
– response.status_code 响应状态码。
– response.encoding 获取文本编码格式。
• 响应内容:
– response.text 响应体 str类。
– response.json() 解码json数据。
响应对象 (2)
• 响应内容(二进制):
– response.content 获取二进制响应内容(推荐)。
• 原始响应内容:
– response.raw 获取来自服务器的原始套接字响应(需要在请求时指定参数stream=True)。
• 其他:
– response. raise_for_status() 响应码不为200时抛出异常。
Requests设置cookie信息
• 使用requests处理cookie有三种方法:
– 在headers字段中添加cookie字符串。
headers = {"cookie的name":"cookie的value"}
– 把cookie字典放传给请求方法的cookies参数接收。
cookies = {"cookie的name":"cookie的value"}
requests.get(url,headers=headers,cookies=cookie_dict}
– 使用requests.session处理cookie。
requests.session
• 使用headers和cookie字典的方式设置cookie都需要手动去添加cookie信息,而requests.session则不需要。
• requests 提供了一个叫做session类,来实现客户端和服务端的会话保持。 session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器的时候,会带上前一次的cookie
• 使用requests.session处理cookie:
session = requests.session()
response = session.get(url,headers)
Requests模块中常用异常
• 网络问题导致的异常:ConnectionError。
• HTTP返回失败的状态码:Response.raise_for_status()会抛出一个HTTPError异常。
• 请求超时:Timeout异常
import requests
import urllib3
from requests.adapters import HTTPAdapter
from urllib3 import Retry
def loadPage(url, filename):
"""
根据url发送请求获取html数据
:param url:url
:param filename:文件名
:return:xxx
"""
# 添加 User-Agent 头部
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
# "range": "bytes=1621094-2193607"
}
# 配置代理
proxies = {
"http": "http://proxysg.xxx.com:8080",
"https": "http://proxysg.xxx.com:8080"
}
# 证书
verify = "/certs/xxx/_.connect.xxx.crt"
# 设置重试策略
session = requests.Session()
retries = Retry(total=5, backoff_factor=0.5)
session.mount("https://", HTTPAdapter(max_retries=retries))
# 请求网址
# with requests.get(url, proxies=proxies, verify=verify) as response:
# 重试与超时机制
with session.get(url, proxies=proxies, verify=verify, timeout=10) as response:
# response = requests.get(url, proxies=proxies)
# 检查状态码
if response.status_code == 200 or response.status_code == 206:
print(f"获取成功,下载保存,状态码:{response.status_code}")
savePdf(response, filename)
# html = response.text
# print(html)
else:
print(f"请求失败,状态码: {response.status_code}")
def savePdf(response, filename):
# 将内容保存到本地文件
with open(f"../pdf/{filename}", "wb") as file:
for chunk in response.iter_content(chunk_size=83886080):
file.write(chunk)
print(f"PDF 文件已保存为: {filename}")
if __name__ == '__main__':
# b
url = "xxx"
filename = "b.pdf"
# a
# url = "xxx"
# filename = "a.pdf"
loadPage(url, filename)
- 点赞
- 收藏
- 关注作者
评论(0)