本文目录导读:

我来介绍几种Python模拟前端请求的常用方法:
使用requests库(最常用)
基本GET请求
import requests
# 基本GET请求
response = requests.get('https://api.example.com/users')
print(response.json())
# 带参数的GET请求
params = {
'page': 1,
'limit': 10,
'search': 'keyword'
}
response = requests.get('https://api.example.com/users', params=params)
POST请求(模拟表单提交)
import requests
# 表单数据
data = {
'username': 'testuser',
'password': '123456'
}
# 模拟登录请求
response = requests.post('https://api.example.com/login', data=data)
print(response.status_code)
print(response.text)
发送JSON数据
import requests
import json
# JSON数据
json_data = {
'name': '张三',
'email': 'zhangsan@example.com',
'age': 25
}
# 设置请求头
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_token_here'
}
# 发送POST请求
response = requests.post(
'https://api.example.com/users',
json=json_data,
headers=headers
)
模拟浏览器行为
添加浏览器请求头
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1'
}
response = requests.get('https://example.com', headers=headers)
使用Session保持会话
import requests
# 创建session对象
session = requests.Session()
# 设置默认headers
session.headers.update({
'User-Agent': 'Mozilla/5.0...',
'Accept-Language': 'zh-CN,zh;q=0.9'
})
# 第一次请求(登录)
login_data = {'username': 'admin', 'password': 'admin123'}
session.post('https://example.com/login', data=login_data)
# 后续请求自动携带cookie
response = session.get('https://example.com/dashboard')
print(response.text)
处理AJAX请求
模拟异步请求
import requests
import json
# 模拟前端AJAX请求
headers = {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest', # AJAX标志
'Accept': 'application/json'
}
# 发送请求并期望JSON响应
response = requests.post(
'https://api.example.com/data',
json={'action': 'fetch_data'},
headers=headers
)
if response.status_code == 200:
data = response.json()
print(data)
处理复杂场景
文件上传模拟
import requests
# 模拟文件上传
files = {
'file': ('test.txt', open('test.txt', 'rb'), 'text/plain')
}
response = requests.post('https://example.com/upload', files=files)
处理重定向和cookies
import requests
# 允许重定向
response = requests.get('https://example.com/redirect', allow_redirects=True)
# 获取cookies
cookies = response.cookies
for key, value in cookies.items():
print(f'{key}: {value}')
# 使用cookies
cookies_dict = {'session_id': 'abc123'}
response = requests.get('https://example.com/profile', cookies=cookies_dict)
完整示例:模拟登录并获取数据
import requests
from bs4 import BeautifulSoup
class WebScraper:
def __init__(self):
self.session = requests.Session()
self.session.headers.update({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
})
def login(self, username, password):
"""模拟登录"""
login_url = 'https://example.com/login'
# 先获取登录页面(获取CSRF token等)
login_page = self.session.get(login_url)
soup = BeautifulSoup(login_page.text, 'html.parser')
csrf_token = soup.find('input', {'name': 'csrf_token'})['value']
# 发送登录请求
login_data = {
'username': username,
'password': password,
'csrf_token': csrf_token
}
response = self.session.post(login_url, data=login_data)
return response.ok
def get_profile(self):
"""获取用户信息"""
profile_url = 'https://example.com/profile'
response = self.session.get(profile_url)
return response.json()
# 使用示例
scraper = WebScraper()
if scraper.login('admin', 'password123'):
profile = scraper.get_profile()
print(profile)
使用异步请求(aiohttp)
import asyncio
import aiohttp
async def fetch_data():
async with aiohttp.ClientSession() as session:
async with session.get('https://api.example.com/data') as response:
return await response.json()
# 运行异步请求
data = asyncio.run(fetch_data())
print(data)
实用技巧
-
设置超时时间:
response = requests.get(url, timeout=10)
-
异常处理:
try: response = requests.get(url) response.raise_for_status() # 检查状态码 except requests.exceptions.RequestException as e: print(f"请求失败: {e}") -
代理设置:
proxies = { 'http': 'http://proxy.example.com:8080', 'https': 'https://proxy.example.com:8080' } response = requests.get(url, proxies=proxies)
这些方法覆盖了大多数前端请求模拟场景,根据实际需求选择合适的方式即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播