一、主要接口
1.1 requests.request(method, url, **kwargs)
构造并发送一个Request对象,返回一个Response对象。
- method – 新建 Request 对象要使用的HTTP方法
- url – 新建 Request 对象的URL
- params – (可选) Request 对象的查询字符中要发送的字典或字节内容
- data – (可选) Request 对象的 body 中要包括的字典、字节或类文件数据
- json – (可选) Request 对象的 body 中要包括的 Json 数据
- headers – (可选) Request 对象的字典格式的 HTTP 头
- cookies – (可选) Request 对象的字典或 CookieJar 对象
- files – (可选) 字典,'name': file-like-objects (或{'name': ('filename', fileobj)}) 用于上传含多个部分的(类)文件对象
- auth – (可选) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
- timeout (浮点或元组) – (可选) 等待服务器数据的超时限制,是一个浮点数,或是一个(connect timeout, read timeout) 元组
- allow_redirects (bool) – (可选) Boolean. True 表示允许跟踪 POST/PUT/DELETE 方法的重定向
- proxies – (可选) 字典,用于将协议映射为代理的URL
- verify – (可选) 为 True 时将会验证 SSL 证书,也可以提供一个 CA_BUNDLE 路径
- stream – (可选) 如果为 False,将会立即下载响应内容
- cert – (可选) 为字符串时应是 SSL 客户端证书文件的路径(.pem格式),如果是元组,就应该是一个(‘cert’, ‘key’) 二元值对
123
>>>
import
requests
>>> req
=
requests.request(
'GET'
,
'http://httpbin.org/get'
)
<Response [
200
]>
1.2 requests.head(url, **kwargs)
发送一个 HEAD 请求,返回一个 Response 对象
- url – 新建 Request 对象的URL
- **kwargs – 见 request 方法接收的可选参数
1.3 requests.get(url, **kwargs)
发送一个 GET 请求,返回一个 Response 对象
- url – 新建 Request 对象的URL
- **kwargs – 见 request 方法接收的可选参数
1.4 requests.post(url, data=None, **kwargs)
发送一个 PUT 请求,返回一个 Response 对象
- url – 新建 Request 对象的URL
- data – (可选) Request 对象的 body 中要包括的字典、字节或类文件数据
- **kwargs – 见 request 方法接收的可选参数
1.5 requests.put(url, data=None, **kwargs)
发送一个 PUT 请求,返回一个 Response 对象
- url – 新建 Request 对象的URL
- data – (可选) Request 对象的 body 中要包括的字典、字节或类文件数据
- **kwargs – 见 request 方法接收的可选参数
1.6 requests.patch(url, data=None, **kwargs)
发送一个 PUT 请求,返回一个 Response 对象
- url – 新建 Request 对象的URL
- data – (可选) Request 对象的 body 中要包括的字典、字节或类文件数据
- **kwargs – 见 request 方法接收的可选参数
1.7 requests.delete(url, **kwargs)
发送一个 PUT 请求,返回一个 Response 对象
- url – 新建 Request 对象的URL
- **kwargs – 见 request 方法接收的可选参数
二、异常
1 2 3 4 5 6 7 8 | exception requests.RequestException # 处理你的请求时出现了一个有歧义的异常 exception requests.ConnectionError # 连接异常 exception requests.HTTPError( * args, * * kwargs) # HTTP 错误 exception requests.URLRequired # 无效的请求 URL exception requests.TooManyRedirects # 重定向过多 exception requests.exceptions.ConnectTimeout( * args, * * kwargs) # 连接到远程服务器时,请求超时 exception requests.exceptions.ReadTimeout( * args, * * kwargs) # 服务器在分配的时间内没有发送任何数据 exception requests.exceptions.Timeout( * args, * * kwargs) # 请求超时限制 |
三、Request 对象
1 | requests.Request(method = None , url = None , headers = None , files = None , data = {}, params = {}, auth = None , cookies = None , hooks = None ) |
由用户创建的 Request 对象,用来准备一个 PreparedRequest 对象,后者被发给服务器
- method – 要使用的 HTTP 方法
- url – 目标 URL
- headers – 字典,要发送的 HTTP header
- files – 字典,形式为{filename: fileobject},表示要上传的多个部分
- data – the body to attach the request. If a dictionary is provided, form-encoding will take place.
- params – 字典,包含追加到 URL 后的 URL 参数
- auth – Auth 句柄或 (user, pass) 元组
- cookies – 附加到这个请求的字典或 CookieJar 对象的cookies
- hooks – dictionary of callback hooks, for internal usage.
1 2 3 4 | >>> import requests >>> req = requests.Request( 'GET' , 'http://httpbin.org/get' ) >>> req.prepare() <PreparedRequest [GET]> |
方法:
1 2 3 | register_hook(event, hook) # 注册一个事件钩子 deregister_hook(event, hook) # 撤销一个已经注册的 hook,如果 hook 存在则返回 True,否则返回 False prepare() # 构造一个 PreparedRequest 对象用于传输,返回一个 PreparedRequest 对象 |
四、PreparedRequest 对象
4.1 class requests.PreparedRequest
1 2 3 4 5 6 7 8 | >>> import requests >>> req = requests.Request( 'GET' , 'http://httpbin.org/get' ) >>> r = req.prepare() <PreparedRequest [GET]> >>> s = requests.Session() >>> s.send(r) <Response [ 200 ]> |
属性与方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | body = None # 发送给服务器的请求 body deregister_hook(event, hook) # 撤销一个已经注册的 hook,如果 hook 存在则返回 True,否则返回 False headers = None # 由HTTP headers构成的字典 hooks = None # dictionary of callback hooks, 仅供内部使用 method = None # HTTP 方法 path_url # 构造要使用的路径URL prepare(method = None , url = None , headers = None , files = None , data = None , params = None , auth = None , cookies = None , hooks = None , json = None ) # 用给定的参数准备整个请求 prepare_auth(auth, url = '') # 准备给定的 HTTP 认证数据 prepare_body(data, files, json = None ) # 准备给定的 HTTP body 数据 prepare_cookies(cookies) # 准备给定的 HTTP cookie 数据 prepare_headers(headers) # prepare_headers(headers) prepare_hooks(hooks) # 准备给定的 hooks prepare_method(method) # 准备给定的 HTTP 方法 prepare_url(url, params) # 准备给定的 HTTP URL register_hook(event, hook) # 适当地注册一个 hook url = None # 将请求发往的 HTTP URL |
五、Response对象
5.1 requests.Response
属性与方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | apparent_encoding # 编码 content # 以字节表示的响应内容 cookies = None # 一个服务器发回的 cookie 的 CookieJar elapsed = None # 发出请求和接收到响应之间的时间间隔 (一个 timedelta) encoding = None # 访问r.text时要以何种编码方式解码 headers = None # 大小写无关的响应头组成的字典,例如: headers['content-encoding'] 将会返回 'Content-Encoding' 响应头的值 history = None # 请求历史的响应对象列表。 任何重定向响应都会到这里。 该列表从最早的请求到最近的请求排序 iter_content(chunk_size = 1 , decode_unicode = False ) # 遍历响应数据。 这避免了一次将内容读入内存以获得较大的响应。 块大小是它应该读入内存的字节数。 这不一定是解码时返回的每个条目的长度。 iter_lines(chunk_size = 512 , decode_unicode = None ) # 在响应数据上迭代,一次一行。 这避免了一次将内容读入内存以获得较大的响应。 json( * * kwargs) # 如果存在,返回JSON格式编码的响应内容 links # 如果有,返回已解析的响应头链接 raise_for_status() # 如果发生HTTPError,则引发存储的HTTPError。 raw = None # 响应的文件类对象表示(用于高级使用)。 要求请求中的' ' stream=True '。 status_code = None # 整数HTTP响应状态码。 text # uncode格式的响应内容 url = None # 响应的最终URL地址 |
六、Session 对象
6.1 requests.Session
1 2 3 4 | >>> import requests >>> s = requests.Session() >>> s.get( 'http://httpbin.org/get' ) 200 |
属性与方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | auth = None # 附加到 Request 对象上的默认认证元组或对象 cert = None # SSL 证书的缺省值 close() # 关闭所有的 adapters 和 session delete(url, * * kwargs) # 发送一个 DELETE 请求,返回 Response 对象 get(url, * * kwargs) # 发送一个 GET 请求,返回 Response 对象 get_adapter(url) # 返回给定URL的适当连接适配器 head(url, * * kwargs) # 发送一个 HEAD 请求,返回 Response 对象 headers = None # 一个大小写不敏感的字典,包含了这个 Session 发出的所有 Request 对象都包含的 headers hooks = None # 事件处理 hook max_redirects = None # 最大重定向次数 mount(prefix, adapter) # 将一个连接适配器注册到一个前缀上 options(url, * * kwargs) # 发送一个 OPTIONS 请求,返回 Response 对象 params = None # 查询字符串数据字典,附加到每个请求。 字典值可以是表示多值查询参数的列表。 patch(url, data = None , * * kwargs) # 发送一个 PATCH 请求,返回 Response 对象 proxies = None # 字典,将协议映射为每个Request使用的代理URL地址(例如: {‘http’: ‘foo.bar:3128’}) put(url, data = None , * * kwargs) # 发送一个 PUT 请求,返回 Response 对象 resolve_redirects(resp, req, stream = False , timeout = None , verify = True , cert = None , proxies = None ) # 接受一个 Response,返回一个 Responses 的 generator send(request, * * kwargs) # 发送一个给定的 PreparedRequest 对象 stream = None # 流式响应内容 trust_env = None # 是否信任环境 verify = None # SSL 验证的默认值 |
6.1 auth = None
附加到 Request 对象上的默认认证元组或对象
6.2 cert = None
SSL 证书的缺省值
6.3 close()
关闭所有的 adapters 和 session
6.4 delete(url, **kwargs)
发送一个 DELETE 请求,返回 Response 对象
参数:
- url – URL for the new Request object.
- **kwargs – 可选 arguments that request takes
6.5 get(url, **kwargs)
发送一个 GET 请求,返回 Response 对象
参数:
- url – URL for the new Request object.
- **kwargs – 可选 arguments that request takes.
6.6 get_adapter(url)
返回给定URL的适当连接适配器
6.7 head(url, **kwargs)
发送一个 HEAD 请求,返回 Response 对象
参数:
- url – 新 Request 对象的URL
- **kwargs – 请求需要的可选参数
6.8 headers = None
一个大小写不敏感的字典,包含了这个 Session 发出的所有 Request 对象都包含的 headers
6.9 hooks = None
事件处理 hook
6.10 max_redirects = None
最大重定向次数
6.11 mount(prefix, adapter)
将一个连接适配器注册到一个前缀上
6.12 options(url, **kwargs)
发送一个 OPTIONS 请求,返回 Response 对象
参数:
- url – URL for the new Request object.
- **kwargs – 可选 arguments that request takes.
6.13 params = None
Dictionary of querystring data to attach to each Request. The dictionary values may be lists for representing multivalued query parameters.
6.14 patch(url, data=None, **kwargs)
发送一个 PATCH 请求,返回 Response 对象
参数:
- url – URL for the new Request object.
- data – (可选) Dictionary, bytes, or file-like object to send in the body of the Request.
- **kwargs – 可选 arguments that request takes.
6.15 post(url, data=None, **kwargs)
发送一个 POST 请求,返回 Response 对象
参数:
- url – URL for the new Request object.
- data – (可选) Dictionary, bytes, or file-like object to send in the body of the Request.
- **kwargs – 可选 arguments that request takes.
6.16 proxies = None
字典,将协议映射为每个Request使用的代理URL地址(例如: {‘http’: ‘foo.bar:3128’})
6.17 put(url, data=None, **kwargs)
发送一个 PUT 请求,返回 Response 对象
参数:
- url – 新 Request 对象的 URL
- data – (可选) Dictionary, bytes, or file-like object to send in the body of the Request.
- **kwargs – 可选 arguments that request takes.
6.18 resolve_redirects(resp, req, stream=False, timeout=None, verify=True, cert=None, proxies=None)
接受一个 Response,返回一个 Responses 的 generator
6.19 send(request, **kwargs)
发送一个给定的 PreparedRequest 对象
6.20 stream = None
流式响应内容
6.21 trust_env = None
是否信任环境
6.22 verify = None
SSL 验证的默认值
七、HTTPAdapter
1 | class requests.adapters.HTTPAdapter(pool_connections = 10 , pool_maxsize = 10 , max_retries = 0 , pool_block = False ) |
针对 urllib3 的内置 HTTP Adapter,通过实现传输适配器接口,为 session 和 HTTP、 HTTPS连接提供了一个通用的接口。该类的实例通常由内部包裹下的Session类创建。
参数:
- pool_connections – 缓存的 urllib3 连接池个数
- pool_maxsize – 连接池中保存的最大连接数
- max_retries (int) – 每次连接的最大失败重试次数,只用于 DNS 查询失败,socket 连接或连接超时,默认情况下 Requests 不会重试失败的连接,如果你需要对请求重试的条件进行细粒度的控制,可以引入 urllib3 的 Retry 类
- pool_block – 连接池是否应该为连接阻塞
1 2 3 4 | >>> import requests >>> s = requests.Session() >>> a = requests.adapters.HTTPAdapter(max_retries = 3 ) >>> s.mount( 'http://' , a) |
方法:
7.1 add_headers(request, **kwargs)
添加需要的 header,用户代码中不应该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
参数:
- request – 要添加 header 的 PreparedRequest 对象
- kwargs – 同于调用 send() 时的关键字参数
7.2 build_response(req, resp)
从一个 urllib3 响应构建一个Response对象,用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
参数:
- req – 用于产生响应的 PreparedRequest 对象
- resp – urllib3 响应对象
7.3 cert_verify(conn, url, verify, cert)
验证一个 SSL 证书,用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
参数:
- conn – 与证书相关的 urllib3 connection 对象
- url – 被请求的 URL.
- verify – 是否真的验证证书
- cert – 要验证的 SSL 证书
7.4 close()
处理掉所有的内部状态
当前该方法仅仅关闭 PoolManager 进而断开池中的连接
7.5 get_connection(url, proxies=None)
对于给定的URL,返回一个 urllib3 连接。 用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
参数:
url – 要连接的URL
proxies – (可选) 一个 Requests 风格的字典,内容是此次请求使用的代理
7.6 init_poolmanager(connections, maxsize, block=False, **pool_kwargs)
初始化一个 urllib3 PoolManager 实例
用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
参数:
- connections – 要缓存的 urllib3 连接池的个数
- maxsize – 连接池可容纳的最大连接数
- block – 没有可用连接时就阻塞
- pool_kwargs – 初始化 Pool Manager 的其他关键字参数
7.7 proxy_headers(proxy)
Returns a dictionary of the headers to add to any request sent through a proxy. This works with urllib3 magic to ensure that they are correctly sent to the proxy, rather than in a tunnelled request if CONNECT is being used.
用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
参数:
- proxies – 该请求使用的代理URL
- kwargs – 可选的关键字参数
7.8 proxy_manager_for(proxy, **proxy_kwargs)
返回给定代理的 urllib3 ProxyManager 对象,用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
参数:
- proxy – 要返回 urllib3 ProxyManager 的代理
- proxy_kwargs – 用来配置Proxy Manager 的额外的关键字参数
返回:
ProxyManager
7.9 request_url(request, proxies)
获取最后一个请求的url,如果消息是由HTTP代理发送的,则必须使用完整的URL,否则只需要使用URL的路径部分
用户代码中不该调用该方法,该方法应该只在 HTTPAdapter 的子类中使用
参数:
- request – 要发送的 PreparedRequest 对象
- proxies – A dictionary of schemes to proxy URLs.
7.10 send(request, stream=False, timeout=None, verify=True, cert=None, proxies=None)
发送 PreparedRequest 对象,返回 Response 对象
参数:
- request – 要发送的 PreparedRequest 对象
- stream – (可选) 是否 stream 请求的内容
- timeout (float 或 tuple) –(可选) How long to wait for the server to send data before giving up, as a float, or a (connect timeout, read timeout) tuple.
- verify – (可选) 是否验证 SSL 证书
- cert – (可选) 可信任的用户提供的 SSL 证书
- proxies – (可选) The proxies dictionary to apply to the request.
八、认证
8.1 class requests.auth.AuthBase
所有认证的基类
8.2 class requests.auth.HTTPBasicAuth(username, password)
将 HTTP Basic Authentication 附加到给定的 Request 对象
8.3 class requests.auth.HTTPProxyAuth(username, password)
将 HTTP Proxy Authentication 附加到给定的 Request 对象
8.4 class requests.auth.HTTPDigestAuth(username, password)
将 HTTP Digest Authentication 附加到给定的 Request 对象
九、编码
9.1 requests.utils.get_encodings_from_content(content)
返回给定内容的编码格式
参数:
- content – 要从中提取编码格式的 bytestring
9.2 requests.utils.get_encoding_from_headers(headers)
根据给定的 HTTP Header 字典返回编码格式
参数:
- headers – 要从中提取编码格式的字典
9.3 requests.utils.get_unicode_from_response(r)
以 unicode 返回响应内容
参数:
- r – 要从中提取编码格式的 Response 对象
尝试:
- content-type 里的字符集
- fall back and replace all unicode characters
十、状态码查询
requests.codes()
1 2 3 4 5 6 7 8 | >>> requests.codes[ 'temporary_redirect' ] 307 >>> requests.codes.teapot 418 >>> requests.codes[ '\o/' ] 200 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码