Requests模块

举报
developer_Li 发表于 2025/03/25 10:25:49 2025/03/25
【摘要】 Requests模块介绍• Requests: 让HTTP服务人类。• Requests是基于urllib库,使用Python实现的简单易用的HTTP库,使用起来比urllib简洁很多。• Requests在Python2 和Python3中通用,方法完全一样。• Requests安装:– pip install requestsRequests发送GET请求• requests.get(u...

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)
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。