一个轻量级的Python库,用于生成真实的HTTP请求头、各类姓名和手机号码,帮助模拟各种浏览器、操作系统和用户身份。
- 🎭 真实模拟: 支持Chrome、Firefox、Opera等主流浏览器
- 🖥️ 多平台: 支持Windows、macOS、Linux操作系统
- 🎲 随机生成: 智能随机组合生成逼真的请求头
- 🚀 零依赖: 纯Python实现,无外部依赖
- 📦 轻量级: 简单易用的API设计
- 🔄 高度可定制: 支持指定特定浏览器和操作系统
- 👤 多语言支持: 支持中文姓名和英文姓名生成
- 📚 经典文学: 支持水浒传、西游记、红楼梦、三国演义、封神演义、金庸武侠等经典作品人物姓名
- 🎯 分组功能: 支持按正派/反派、势力、作品等维度分组生成
- ⚖️ 概率权重: 支持为不同分组设置出现概率,更真实地模拟分布
- 🔢 批量生成: 支持一次生成多个不重复的姓名
- 📱 多国支持: 支持中国和美国手机号码生成
- 🏢 运营商支持: 中国手机号支持移动、联通、电信三大运营商
- ⚖️ 概率权重: 支持为不同运营商设置出现概率(移动用户最多)
- 🔢 批量生成: 支持一次生成多个不重复的手机号码
- 📐 格式灵活: 美国手机号支持带/不带连字符格式
pip install funfakefrom funfake import fake_header
# 生成随机请求头
headers = fake_header()
print(headers)
# 输出示例:
# {
# 'Accept': '*/*',
# 'Connection': 'keep-alive',
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
# 'Accept-Encoding': 'gzip, deflate, br',
# 'Accept-Language': 'en-US;q=0.5,en;q=0.3',
# 'Referer': 'https://www.google.com'
# }from funfake import Headers
# 指定浏览器和操作系统
chrome_headers = Headers(browser='chrome', os='win', headers=True)
headers = chrome_headers.generate()
# 指定Firefox浏览器,macOS系统
firefox_headers = Headers(browser='firefox', os='mac', headers=True)
headers = firefox_headers.generate()
# 只生成基础请求头(不包含额外头信息)
basic_headers = Headers(browser='chrome', os='linux', headers=False)
headers = basic_headers.generate()
# 生成多个不重复的请求头
multiple_headers = Headers().generate_many(5)from funfake import fake_name, ChineseName, EnglishName
# 快速生成随机姓名
name = fake_name() # 随机选择中文或英文
name = fake_name('chinese') # 生成中文姓名
name = fake_name('english') # 生成英文姓名
# 使用生成器类
chinese = ChineseName()
name = chinese.generate() # 例如: "王伟"
english = EnglishName()
name = english.generate() # 例如: "John Smith"
# 生成多个不重复的姓名
chinese_names = chinese.generate_many(10) # 生成10个不重复的中文姓名
english_names = english.generate_many(10) # 生成10个不重复的英文姓名from funfake import (
WaterMarginName, # 水浒传
JourneyToWestName, # 西游记
DreamOfRedChamberName, # 红楼梦
RomanceOfThreeKingdomsName, # 三国演义
InvestitureOfGodsName, # 封神演义
JinYongWuxiaName, # 金庸武侠
)
# 生成水浒传人物姓名
water_margin = WaterMarginName()
name = water_margin.generate() # 例如: "林冲"
# 查看可用分组
groups = water_margin.get_groups() # ['正派', '反派']
# 从指定组生成(正派/反派)
name = water_margin.generate(group="正派") # 只生成正派人物
name = water_margin.generate(group="反派") # 只生成反派人物
# 生成多个不重复的姓名
names = water_margin.generate_many(5, group="正派") # 生成5个正派人物
# 三国演义 - 按势力分组
three_kingdoms = RomanceOfThreeKingdomsName()
groups = three_kingdoms.get_groups() # ['蜀汉', '曹魏', '东吴', '其他']
name = three_kingdoms.generate(group="蜀汉") # 只生成蜀汉人物
# 西游记 - 按正派/反派/中立分组
journey = JourneyToWestName()
name = journey.generate(group="正派") # 生成正派人物(如:孙悟空、观音菩萨)
name = journey.generate(group="反派") # 生成反派人物(如:牛魔王、白骨精)场景类生成器支持概率权重,不同分组有不同的出现概率:
water_margin = WaterMarginName()
# 正派权重: 10.0,反派权重: 1.0
# 生成时正派人物出现概率更高
name = water_margin.generate() # 更可能生成正派人物from funfake import fake_phone, ChinesePhone, EnglishPhone
# 快速生成随机手机号
phone = fake_phone() # 随机选择中国或美国
phone = fake_phone('chinese') # 生成中国手机号
phone = fake_phone('english') # 生成美国手机号
# 使用生成器类
chinese_phone = ChinesePhone()
phone = chinese_phone.generate() # 例如: "13812345678"
english_phone = EnglishPhone()
phone = english_phone.generate() # 例如: "555-123-4567"
# 生成多个不重复的手机号
phones = chinese_phone.generate_many(10) # 生成10个不重复的中国手机号from funfake import ChinesePhone
chinese_phone = ChinesePhone()
# 查看可用运营商
operators = chinese_phone.get_operators() # ['移动', '联通', '电信']
# 从指定运营商生成
phone = chinese_phone.generate(operator="移动") # 只生成移动号码
phone = chinese_phone.generate(operator="联通") # 只生成联通号码
phone = chinese_phone.generate(operator="电信") # 只生成电信号码
# 生成多个不重复的手机号
phones = chinese_phone.generate_many(10, operator="移动") # 生成10个移动号码
# 按运营商权重随机生成(移动权重最高)
phone = chinese_phone.generate() # 更可能生成移动号码from funfake import EnglishPhone
english_phone = EnglishPhone()
# 带连字符格式(默认)
phone = english_phone.generate() # 例如: "555-123-4567"
# 不带连字符格式
phone = english_phone.generate(format_with_dash=False) # 例如: "5551234567"
# 初始化时设置格式
phone_gen = EnglishPhone(format_with_dash=False)
phone = phone_gen.generate() # 始终生成不带连字符的格式生成随机的HTTP请求头。
返回值: dict - 包含HTTP请求头的字典
用于自定义生成HTTP请求头的类。
参数:
-
browser(str, 可选): 浏览器类型'chrome': Chrome浏览器'firefox': Firefox浏览器'opera': Opera浏览器None: 随机选择 (默认)
-
os(str, 可选): 操作系统类型'win': Windows系统'mac': macOS系统'lin': Linux系统None: 随机选择 (默认)
-
headers(bool, 可选): 是否生成额外的HTTP头True: 包含Accept-Encoding、Accept-Language等额外头信息False: 只包含基础头信息 (默认)
方法:
generate(): 生成HTTP请求头字典generate_many(count, allow_duplicates=False): 生成多个不重复的请求头
快速生成随机姓名。
参数:
language(str, 可选): 语言类型'chinese': 生成中文姓名'english': 生成英文姓名None: 随机选择 (默认)
返回值: str - 生成的姓名
中文姓名生成器。
参数:
double_name_probability(float, 可选): 生成双字名字的概率,默认 0.3
方法:
generate(): 生成单个中文姓名generate_many(count, allow_duplicates=False): 生成多个不重复的中文姓名
英文姓名生成器。
方法:
generate(): 生成单个英文姓名generate_many(count, allow_duplicates=False): 生成多个不重复的英文姓名
所有场景类生成器都继承自 ListBasedGenerator,支持以下功能:
类列表:
WaterMarginName: 水浒传JourneyToWestName: 西游记DreamOfRedChamberName: 红楼梦RomanceOfThreeKingdomsName: 三国演义InvestitureOfGodsName: 封神演义JinYongWuxiaName: 金庸武侠
方法:
generate(group=None): 生成单个姓名group(str, 可选): 指定分组,如 "正派"、"反派" 等
generate_many(count, allow_duplicates=False, group=None): 生成多个不重复的姓名count(int): 要生成的数量allow_duplicates(bool): 是否允许重复(当数量超过可用数据时)group(str, 可选): 指定分组
get_groups(): 获取所有可用的分组列表
所有生成器的抽象基类。
方法:
generate(): 抽象方法,子类必须实现generate_many(count, allow_duplicates=False): 生成多个不重复的结果(默认实现)
基于固定列表的生成器基类,支持概率权重和分组。
配置方式:
NAMES: 简单列表(向后兼容)NAMES_BY_GROUP: 按组分组的名字字典(推荐)GROUP_WEIGHTS: 组的权重字典,控制不同组的出现概率
快速生成随机手机号码。
参数:
country(str, 可选): 国家类型'chinese': 生成中国手机号'english': 生成美国手机号None: 随机选择 (默认)
返回值: str - 生成的手机号码
中国手机号码生成器。
参数:
operator(str, 可选): 运营商类型,'移动'/'联通'/'电信',None 表示按权重随机选择
方法:
generate(operator=None): 生成单个中国手机号(11位)operator(str, 可选): 临时指定运营商
generate_many(count, allow_duplicates=False, operator=None): 生成多个不重复的中国手机号get_operators(): 获取所有可用的运营商列表
运营商权重:
- 移动: 10.0(用户最多)
- 联通: 6.0
- 电信: 4.0
美国手机号码生成器。
参数:
format_with_dash(bool, 可选): 是否使用连字符格式化,默认 True
方法:
generate(format_with_dash=None): 生成单个美国手机号format_with_dash(bool, 可选): 是否使用连字符(XXX-XXX-XXXX 或 XXXXXXXXXX)
generate_many(count, allow_duplicates=False, format_with_dash=None): 生成多个不重复的美国手机号
- Web爬虫: 避免被网站检测为机器人
- API测试: 模拟真实用户请求
- 负载测试: 生成多样化的请求头
- 浏览器兼容性测试: 测试不同浏览器环境
- 网络请求模拟: 在自动化测试中使用
- 测试数据生成: 为测试用例生成随机姓名
- 游戏开发: 生成NPC角色姓名
- 数据脱敏: 生成假姓名替换真实数据
- 内容创作: 为小说、游戏等生成角色姓名
- 用户注册测试: 批量生成测试用户姓名
- 测试数据生成: 为测试用例生成随机手机号
- 用户注册测试: 批量生成测试用户手机号
- 数据脱敏: 生成假手机号替换真实数据
- API测试: 模拟用户手机号进行接口测试
- 负载测试: 生成大量不重复的手机号进行压力测试
| 浏览器 | 支持版本数量 | 版本范围 |
|---|---|---|
| Chrome | 87+ | 50.0 - 87.0 |
| Firefox | 138+ | 50.0 - 80.0 |
| Opera | 42+ | 50.0 - 67.0 |
- Windows: Windows NT 6.0-6.3, Windows 10
- macOS: Mac OS X 10.10-10.14
- Linux: 支持x86_64、i686架构
内置532个真实网站域名作为Referer,包括:
- Google、YouTube、Facebook等主流网站
- 各国Wikipedia、新闻媒体网站
- 技术类网站如GitHub、Stack Overflow
- 电商网站如Amazon、eBay
| 类型 | 说明 | 数据量 |
|---|---|---|
| 中文姓名 | 常见中文姓氏 + 名字 | 100+ 姓氏,100+ 名字 |
| 英文姓名 | 常见英文名字 + 姓氏 | 200+ 名字,200+ 姓氏 |
| 场景 | 分组维度 | 数据量 |
|---|---|---|
| 水浒传 | 正派/反派 | 108+ 人物 |
| 西游记 | 正派/反派/中立 | 60+ 人物 |
| 红楼梦 | 主要角色/次要角色/丫鬟 | 100+ 人物 |
| 三国演义 | 蜀汉/曹魏/东吴/其他 | 150+ 人物 |
| 封神演义 | 阐教/截教/商朝/周朝/其他 | 100+ 人物 |
| 金庸武侠 | 按作品分组(7个作品) | 200+ 人物 |
水浒传:
- 正派: 权重 10.0(108个梁山好汉)
- 反派: 权重 1.0(高俅、蔡京等)
西游记:
- 正派: 权重 8.0(孙悟空、观音菩萨等)
- 反派: 权重 5.0(牛魔王、白骨精等)
- 中立: 权重 2.0(土地、山神等)
三国演义:
- 蜀汉: 权重 8.0
- 曹魏: 权重 8.0
- 东吴: 权重 8.0
- 其他: 权重 3.0
| 运营商 | 号段前缀 | 权重 | 说明 |
|---|---|---|---|
| 移动 | 134-139, 147, 150-152, 157-159, 178, 182-184, 187-188, 198 | 10.0 | 用户最多 |
| 联通 | 130-132, 145, 155-156, 166, 171, 175-176, 185-186 | 6.0 | 第二大运营商 |
| 电信 | 133, 149, 153, 173, 177, 180-181, 189, 199 | 4.0 | 第三大运营商 |
格式: 11位数字,1开头
格式: 10位数字,支持两种格式
- 带连字符:
XXX-XXX-XXXX(12个字符) - 不带连字符:
XXXXXXXXXX(10个字符)
区号规则: 前3位不能以0或1开头,支持200+个真实区号
import requests
from funfake import fake_header
url = "https://httpbin.org/headers"
headers = fake_header()
response = requests.get(url, headers=headers)
print(response.json())import requests
from funfake import Headers
class WebScraper:
def __init__(self):
self.session = requests.Session()
self.header_generator = Headers(headers=True)
def get_page(self, url):
# 每次请求使用不同的请求头
headers = self.header_generator.generate()
self.session.headers.update(headers)
return self.session.get(url)from funfake import ChineseName, EnglishName
# 生成100个中文测试用户姓名
chinese = ChineseName()
users = chinese.generate_many(100)
for i, name in enumerate(users, 1):
print(f"用户{i}: {name}")from funfake import WaterMarginName, JourneyToWestName
# 生成水浒传正派角色
water_margin = WaterMarginName()
heroes = water_margin.generate_many(10, group="正派")
villains = water_margin.generate_many(5, group="反派")
print("正派角色:", heroes)
print("反派角色:", villains)from funfake import JourneyToWestName
journey = JourneyToWestName()
# 生成100个角色,正派权重更高,会出现更多正派角色
characters = []
for _ in range(100):
characters.append(journey.generate())
# 统计分布
from collections import Counter
counter = Counter(characters)
# 正派角色(如孙悟空、观音菩萨)出现频率会更高from funfake import RomanceOfThreeKingdomsName
three_kingdoms = RomanceOfThreeKingdomsName()
# 按势力生成角色
shu_heroes = three_kingdoms.generate_many(10, group="蜀汉")
wei_heroes = three_kingdoms.generate_many(10, group="曹魏")
wu_heroes = three_kingdoms.generate_many(10, group="东吴")
print("蜀汉:", shu_heroes)
print("曹魏:", wei_heroes)
print("东吴:", wu_heroes)from funfake import ChinesePhone, EnglishPhone
# 生成100个中国手机号
chinese_phone = ChinesePhone()
phones = chinese_phone.generate_many(100)
for i, phone in enumerate(phones, 1):
print(f"用户{i}: {phone}")from funfake import ChinesePhone
chinese_phone = ChinesePhone()
# 生成移动号码
mobile_phones = chinese_phone.generate_many(10, operator="移动")
# 生成联通号码
unicom_phones = chinese_phone.generate_many(10, operator="联通")
# 生成电信号码
telecom_phones = chinese_phone.generate_many(10, operator="电信")from funfake import ChinesePhone
chinese_phone = ChinesePhone()
# 生成100个手机号,移动权重更高,会出现更多移动号码
phones = []
for _ in range(100):
phones.append(chinese_phone.generate())
# 统计运营商分布
from collections import Counter
# 移动号码会更多(权重10.0 vs 联通6.0 vs 电信4.0)from funfake import EnglishPhone
# 带连字符格式(默认)
phone_gen1 = EnglishPhone(format_with_dash=True)
phone1 = phone_gen1.generate() # "555-123-4567"
# 不带连字符格式
phone_gen2 = EnglishPhone(format_with_dash=False)
phone2 = phone_gen2.generate() # "5551234567"欢迎提交Issue和Pull Request!
本项目采用MIT许可证 - 查看 LICENSE 文件了解详情。
- 牛哥 - niuliangtao@qq.com
- farfarfun团队 - farfarfun@qq.com