Python3 requests 库

requests 是 Python 最流行的 HTTP 客户端库。官方 urllib 虽能用,但拼 URL、加请求头、处理响应都很繁琐;requests 一句 GET/POST 搞定请求,自动解析 JSON、管理连接,是爬虫和接口调用的首选。

安装

pip install requests        # 第三方库,需先安装

发起 GET 请求

import requests

r = requests.get("https://httpbin.org/get")
print(r.status_code)        # 输出:200
print(r.text[:80])          # 输出:响应正文的前 80 个字符

params 与 headers:携带参数和请求头

带查询串的请求把参数放进字典交给 params,requests 负责拼接与转义:

import requests

params = {"q": "python", "page": 2}
r = requests.get("https://httpbin.org/get", params=params)
print(r.url)   # 输出:https://httpbin.org/get?q=python&page=2

# 自定义请求头用 headers 参数
r2 = requests.get("https://httpbin.org/get",
                  headers={"User-Agent": "Mozilla/5.0"})

响应对象常用属性

r = requests.get("https://httpbin.org/json")
print(r.status_code)                  # 输出:200
print(r.headers.get("Content-Type"))  # 输出:application/json
print(r.text)                         # 输出:原始响应文本
print(r.json())                       # 输出:自动把 JSON 解析为 dict/list

POST 提交:data 与 json

提交表单用 data,提交 JSON 用 json(会自动设置 Content-Type: application/json):

import requests

# 表单方式
r1 = requests.post("https://httpbin.org/post", data={"name": "张三"})
# JSON 方式(接口最常用)
r2 = requests.post("https://httpbin.org/post", json={"name": "张三"})
print(r2.json()["json"])   # 输出:{'name': '张三'}

timeout:设置超时

不设 timeout,请求可能无限期挂起。timeout=3 表示连接与读取各自最多等 3 秒:

import requests

try:
    r = requests.get("https://httpbin.org/delay/5", timeout=3)
except requests.exceptions.Timeout:
    print("请求超时")       # 输出:请求超时

异常处理

网络错误、超时、状态码异常都应捕获。用 raise_for_status() 把 4xx/5xx 变成异常:

import requests

try:
    r = requests.get("https://httpbin.org/status/500", timeout=5)
    r.raise_for_status()               # 状态码非 2xx 时抛 HTTPError
except requests.exceptions.RequestException as e:
    print("请求失败:", e)   # 输出:请求失败:500 Server Error ...

RequestException 是所有 requests 异常的基类,一次 except 即可兜底大部分错误。

示例:请求天气/翻译接口

以调用翻译类开放接口为例(具体地址、字段与鉴权以你所申请接口的文档为准):

# 需安装依赖并配置环境后运行:pip install requests
import requests

url = "https://api.example.com/translate"   # 替换为你申请的接口地址
resp = requests.post(
    url,
    timeout=10,
    json={"q": "hello world", "from": "en", "to": "zh"},
    headers={"Authorization": "Bearer 你的APIKey"},
)
resp.raise_for_status()
print(resp.json())   # 输出:翻译结果字典(字段视接口而定)

小结:requests 用 GET/POST 一句话发请求——params 拼查询参数、data/json 提交数据、timeout 防挂起,响应对象提供 status_code/text/json();配合异常处理即可稳定调用各类 HTTP 接口。

笔记加载中…