全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-19 8 分钟 ✍️ juanwangdev

Python HTTP客户端请求

HTTP 客户端请求是网络编程的基础,Python 提供多种方式发送请求。

urllib 基本请求

Python
from urllib.request import urlopen, Request
from urllib.parse import urlencode

# GET 请求
response = urlopen('https://httpbin.org/get')
data = response.read().decode('utf-8')
print(data)

# POST 请求
data = urlencode({'key': 'value'}).encode('utf-8')
response = urlopen('https://httpbin.org/post', data=data)
result = response.read().decode('utf-8')

urllib 自定义请求

Python
from urllib.request import Request, urlopen

# 自定义请求头
req = Request(
    'https://httpbin.org/get',
    headers={
        'User-Agent': 'Python-Client',
        'Authorization': 'Bearer token'
    }
)
response = urlopen(req)
print(response.read().decode('utf-8'))

# 添加自定义方法
req = Request('https://httpbin.org/delete', method='DELETE')
response = urlopen(req)

requests 基本使用

Python
import requests

# GET 请求
response = requests.get('https://httpbin.org/get')
print(response.json())

# 带参数 GET
response = requests.get(
    'https://httpbin.org/get',
    params={'key': 'value', 'id': 123}
)
print(response.url)  # 显示完整 URL

# POST 请求
response = requests.post(
    'https://httpbin.org/post',
    data={'username': 'alice', 'password': 'secret'}
)
print(response.json())

requests JSON 处理

Python
import requests

# 发送 JSON 数据
response = requests.post(
    'https://httpbin.org/post',
    json={'name': 'Alice', 'age': 25}
)
print(response.json())

# 自动解析响应 JSON
response = requests.get('https://httpbin.org/get')
data = response.json()  # 自动解析
print(data['args'])

requests 自定义请求头

Python
import requests

headers = {
    'User-Agent': 'Python-Client/1.0',
    'Authorization': 'Bearer abc123',
    'Content-Type': 'application/json'
}

response = requests.get(
    'https://httpbin.org/headers',
    headers=headers
)
print(response.json())

requests 响应处理

Python
import requests

response = requests.get('https://httpbin.org/get')

# 响应内容
print(response.text)      # 文本内容
print(response.content)   # 字节内容
print(response.json())    # JSON 解析

# 响应信息
print(response.status_code)  # 状态码
print(response.headers)      # 响应头
print(response.cookies)      # Cookie

# 状态码检查
if response.status_code == 200:
    print("请求成功")
elif response.status_code == 404:
    print("资源不存在")

requests 会话管理

Python
import requests

# Session 保持连接和 Cookie
session = requests.Session()
session.headers.update({'User-Agent': 'Python-Client'})

# 多次请求共享 Session
response = session.get('https://httpbin.org/cookies/set?name=value')
response = session.get('https://httpbin.org/cookies')
print(response.json()['cookies'])

# 登录后保持会话
session.post('https://example.com/login', data={'user': 'alice'})
response = session.get('https://example.com/profile')

requests 异常处理

Python
import requests
from requests.exceptions import RequestException

try:
    response = requests.get(
        'https://httpbin.org/delay/5',
        timeout=3  # 超时设置
    )
except requests.Timeout:
    print("请求超时")
except requests.ConnectionError:
    print("连接错误")
except requests.HTTPError as e:
    print(f"HTTP错误: {e}")
except RequestException as e:
    print(f"请求异常: {e}")

# 使用 raise_for_status 检查
response = requests.get('https://httpbin.org/status/404')
try:
    response.raise_for_status()
except requests.HTTPError:
    print("HTTP状态码错误")

urllib vs requests

特性urllibrequests
简洁性复杂简洁
JSON处理手动解析自动解析
Session支持
错误处理通用专用异常
参数编码urlencodeparams 参数

requests 完整示例

Python
import requests

class HttpClient:
    def __init__(self, base_url, headers=None):
        self.session = requests.Session()
        self.base_url = base_url
        if headers:
            self.session.headers.update(headers)

    def get(self, path, params=None, timeout=10):
        url = f"{self.base_url}{path}"
        response = self.session.get(url, params=params, timeout=timeout)
        response.raise_for_status()
        return response.json()

    def post(self, path, data=None, json=None, timeout=10):
        url = f"{self.base_url}{path}"
        response = self.session.post(
            url, data=data, json=json, timeout=timeout
        )
        response.raise_for_status()
        return response.json()

# 使用
client = HttpClient('https://httpbin.org')
data = client.get('/get', params={'key': 'value'})
print(data)

要点总结

  • urllib 是标准库,requests 是第三方库(更推荐)
  • requests.get() 发送 GET 请求
  • requests.post() 发送 POST 请求
  • params 参数自动编码 URL 参数
  • json 参数自动处理 JSON 数据
  • Session 保持连接和 Cookie
  • timeout 设置请求超时
  • raise_for_status() 检查 HTTP 状态码
  • requests 异常类细化错误类型

📝 发现内容有误?点击此处直接编辑

← 上一篇 Python 进程池 ProcessPoolExecutor
下一篇 → Python URL处理与解析
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库