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
相关推荐
GetcharZp1 小时前
告别 jq 噩梦!这款 JSON 神器 fx 让你在终端体验“丝滑”的数据操作
后端
2301_803875611 小时前
PHP 中处理会话数组时的类型错误解析与修复指南
jvm·数据库·python
m0_743623921 小时前
c++如何批量修改文件后缀名_std--filesystem--replace_extension【实战】
jvm·数据库·python
2501_914245932 小时前
CSS如何处理CSS变量作用域冲突_利用特定类名重写变量值
jvm·数据库·python
菜鸟学Python2 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
<-->2 小时前
Megatron(全称 Megatron-LM,由 NVIDIA 开发)和 DeepSpeed(由 Microsoft 开发)
人工智能·pytorch·python·深度学习·transformer
小码哥_常2 小时前
告别臃肿!Elasticsearch平替Manticore登场
后端
测试19983 小时前
2026最新软件测试面试八股文【附文档】
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
maqr_1103 小时前
MySQL数据库迁移到云端如何保障安全_数据加密与SSL连接配置
jvm·数据库·python
苍何3 小时前
万字保姆级教程:Hermes+Kimi K2.6 打造7x24h Agent军团
后端