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
相关推荐
AIMath~1 分钟前
python中的uv命令揭秘
开发语言·python·uv
弹简特4 分钟前
【零基础学Python】06-Python模块和包、异常处理、文件常用操作
开发语言·python
念恒1230615 分钟前
Python 面向对象编程核心:对象、实例化、封装与变量作用域
开发语言·python
雪隐17 分钟前
个人电脑玩AI00-前言
人工智能·后端
薛定谔的悦18 分钟前
光伏-储能-负荷联合预测:给 EMS 装上“预知能力“
java·数据库·人工智能·python·储能
我是一颗柠檬28 分钟前
【Java后端技术亮点】动态路由权限(按钮级权限),细粒度控制到按钮级别
java·开发语言·后端·状态模式
前端Hardy35 分钟前
CSS 动画真的比 JS 快?Josh Comeau 做了组实验,结果跟直觉不一样
前端·javascript·后端
Front思36 分钟前
调取支付宝支付正式环境不可以唤起来,但是沙箱可以
后端
foggyprojects42 分钟前
AI 生成 SQL 模板以后,为什么还需要固定 helper 规则
后端
明天一点43 分钟前
Cloudflare 通知转发钉钉机器人
前端·后端