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
相关推荐
_深海凉_2 小时前
LeetCode热题100-反转链表
python·leetcode·链表
CodeSheep2 小时前
JetBrains又一知名软件宣布倒下,五味杂陈
前端·后端·程序员
SimonKing2 小时前
GitHub热榜1k星影视壳(OuonnkiTV)遇上AI影视源
java·后端·程序员
gc_22992 小时前
学习python使用Ultralytics的YOLO26进行姿势估计的基本用法
python·ultralytics·yolo26·姿势估计
2201_754864782 小时前
学习日记(2026年3月29日)
人工智能·python·机器学习
zero15972 小时前
Python 8天极速入门笔记(大模型工程师专用):第二篇-Python基础入门(变量、数据类型、print输出)
开发语言·笔记·python
koping_wu2 小时前
【Java并发】CompletableFuture详解:常用API和底层原理
java·开发语言·python
小松加哲2 小时前
# Spring Aware 与 BeanPostProcessor:作用、使用与原理(源码级)
java·后端·spring
:mnong3 小时前
附图报价系统设计分析2
python·pyqt·openvino