requests笔记

安装

shell 复制代码
pip install requests

get请求

python 复制代码
import requests  
import logging  
  
logging.basicConfig(level=logging.INFO,  
                    format='%(asctime)s-%(filename)s-%(funcName)s-%(levelname)s\n%(message)s')  
  
base_url = "https://www.baidu.com/s"  
headers = {  
    "accept": r"application/json, text/javascript, */*; q=0.01",  
    "accept-language": r"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",  
    "user-agent": r"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0",  
    # 这里可以配置cookie(不推荐)  
    # "cookie":r"_EDGE_V=1; MUID=2889D574C107.......15B1AE0B0AEA"  
}  
# 单独配置cookie  
cookies = {  
    "token": "jdshfsdjgvjsdfkl"  
}  
params = {  
    "wd": "迷你世界"  
}  
response = requests.get(base_url, params=params, cookies=cookies, headers=headers, timeout=10)

post请求

python 复制代码
import requests  
import logging  
  
logging.basicConfig(level=logging.INFO,  
                    format='%(asctime)s-%(filename)s-%(funcName)s-%(levelname)s\n%(message)s')  
def requests_post1():  
    payload = {'key1': 'value1', 'key2': 'value2'}  
    response = requests.post("http://httpbin.org/post", data=payload, timeout=20)  
    logging.info(response.text)  
  
  
def requests_post2():  
    # 编码为JSON的POST/PATCH请求数据  
    import json      
    response = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some': 'data'}))  
    logging.info(response.text)

def requests_post3():  
    """  
    上传文件  
    """    
    files = {'file': open('report.xls', 'rb')}  
    response = requests.post('http://httpbin.org/post', files=files)  
    logging.info(response.text)

如果你发送一个非常大的文件作为 multipart/form-data 请求,你可能希望将请求做成数据流。默认下 requests 不支持, 但有个第三方包 requests-toolbelt 是支持的。你可以阅读 toolbelt 文档 来了解使用方法。

响应内容

内容 代码 备注
传递 URL 参数 response.url
响应内容 response.text
二进制响应内容 response.content
JSON 响应内容 response.jso()
判断是否响应成功 response.raise_for_status() 成功返回None。失败就报错
响应状态码 status_code
响应头 headers 字典类型

session会话

会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持(如 cookies、headers、auth)复用共享。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用。

python 复制代码
import requests  
import logging  
  
logging.basicConfig(level=logging.INFO,  
                    format='%(asctime)s-%(filename)s-%(funcName)s-%(levelname)s\n%(message)s')

def requests_session():  
    add_cookies_url = r"http://httpbin.org/cookies/set/sessioncookie/123456789"  
    base_url = r"http://httpbin.org/cookies"  
    session = requests.Session()  
    session.get(add_cookies_url)  
    response = session.get(base_url)  
      
    logging.info(response.text)

会话也可用来为请求方法提供缺省数据。这是通过为会话对象的属性提供数据来实现的:

python 复制代码
session = requests.Session()
# 为该会话设置基本认证(Basic Auth)此后通过这个对象发出的所有请求,都会自动在 HTTP 头部包含经过 Base64 编码的用户名和密码,除非在单个请求中显式覆盖它。
session.auth = ('user', 'pass')
# 更新会话的默认头部信息。
session.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
session.get('http://httpbin.org/headers', headers={'x-test2': 'true'})

合并机制:requests 库在发送请求时,会将会话级头部与请求级头部合并。这意味着最终发出的请求将同时包含 x-test: true(来自会话)和 x-test2: true(来自本次 get 请求)。

单例模式获得session

python 复制代码
import requests
  
class SessionClient():  
    _instance = None  
    session = None  
  
    def __new__(cls, *args, **kwargs):  
        if cls._instance is None:  
            cls._instance = super().__new__(cls)  
            cls.session = requests.Session()  
        return cls._instance  
  
    @classmethod  
    def get_session(cls):  
        return cls.session
相关推荐
高级程序源8 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
WeiXin_DZbishe8 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
kimnoic9 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
snhna9 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
架构技术专栏9 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
码事漫谈9 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
必须得开心呀10 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan10 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
青少儿编程课堂10 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
计算机编程指导师10 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通