专业的短链接生成工具
链接域名
短网址有效期
短网址
更新时间:2025-5-3 13:04:07 作者:爱短链
短网址(Short URL)是一种将长网址压缩为较短字符串的技术,用于简化链接分享、节省字符空间(如社交媒体或短信)以及隐藏原始网址。其核心原理包括以下步骤:生成唯一标识:
使用哈希算法(如 MD5、SHA-1)对长网址生成固定长度的哈希值。
或通过自增 ID 生成器分配唯一编号,并将其转换为短字符串(如 Base62 编码)。
存储映射关系:
将长网址与短字符串的映射关系存储在数据库中(如 MySQL、Redis)。
重定向服务:
当用户访问短网址时,服务端查询数据库获取对应的长网址,并通过 HTTP 302 状态码重定向到原始地址。
实现短网址的源代码示例(Python + Flask)
以下是一个简单的短网址生成器实现,使用 Flask 框架和 SQLite 数据库:
python
import sqlite3 | |
import string | |
import random | |
from flask import Flask, request, redirect, jsonify | |
app = Flask(__name__) | |
# 数据库初始化 | |
def init_db(): | |
conn = sqlite3.connect('short_url.db') | |
cursor = conn.cursor() | |
cursor.execute(''' | |
CREATE TABLE IF NOT EXISTS urls ( | |
id INTEGER PRIMARY KEY AUTOINCREMENT, | |
original_url TEXT NOT NULL, | |
short_code TEXT UNIQUE NOT NULL | |
) | |
''') | |
conn.commit() | |
conn.close() | |
# 生成随机短码 | |
def generate_short_code(length=6): | |
chars = string.ascii_letters + string.digits | |
return ''.join(random.choices(chars, k=length)) | |
# 生成短网址 | |
@app.route('/shorten', methods=['POST']) | |
def shorten_url(): | |
data = request.json | |
original_url = data.get('url') | |
if not original_url: | |
return jsonify({'error': 'URL is required'}), 400 | |
conn = sqlite3.connect('short_url.db') | |
cursor = conn.cursor() | |
# 检查是否已存在 | |
cursor.execute('SELECT short_code FROM urls WHERE original_url = ?', (original_url,)) | |
result = cursor.fetchone() | |
if result: | |
short_code = result[0] | |
else: | |
# 生成新短码 | |
while True: | |
short_code = generate_short_code() | |
cursor.execute('SELECT * FROM urls WHERE short_code = ?', (short_code,)) | |
if not cursor.fetchone(): | |
break | |
# 插入数据库 | |
cursor.execute('INSERT INTO urls (original_url, short_code) VALUES (?, ?)', (original_url, short_code)) | |
conn.commit() | |
conn.close() | |
short_url = f'http://localhost:5000/{short_code}' | |
return jsonify({'short_url': short_url}) | |
# 重定向到原始网址 | |
@app.route('/<short_code>') | |
def redirect_to_original(short_code): | |
conn = sqlite3.connect('short_url.db') | |
cursor = conn.cursor() | |
cursor.execute('SELECT original_url FROM urls WHERE short_code = ?', (short_code,)) | |
result = cursor.fetchone() | |
conn.close() | |
if result: | |
return redirect(result[0]) | |
else: | |
return 'URL not found', 404 | |
if __name__ == '__main__': | |
init_db() | |
app.run(debug=True) |
代码说明
数据库:
使用 SQLite 存储长网址与短码的映射关系。
表结构包含 id(自增主键)、original_url(原始网址)、short_code(短码)。
短码生成:
使用 random.choices 从字母和数字中随机选择字符,生成固定长度的短码。
短码长度默认为 6,可根据需求调整。
API 接口:
/shorten:接收长网址并返回对应的短网址。
/<short_code>:根据短码重定向到原始网址。
错误处理:
检查输入参数是否合法。
防止短码重复生成。
使用方法
安装依赖:
bash
pip install flask |
运行服务:
bash
python app.py |
测试接口:
生成短网址:
bash
curl -X POST -H "Content-Type: application/json" -d '{"url": "https://example.com"}' http://localhost:5000/shorten |
访问短网址:
在浏览器中打开生成的短网址,例如 http://localhost:5000/abc123。
扩展功能
自定义短码:
允许用户指定短码,并检查是否已存在。
点击统计:
记录每个短网址的访问次数和访问来源。
过期时间:
为短网址设置有效期,过期后自动删除。
API 文档:
使用 Swagger 或 Postman 提供 API 文档。
总结
短网址的核心在于唯一标识生成和映射关系存储。上述示例提供了一个基础实现,可根据需求扩展功能,如自定义短码、点击统计等。实际应用中,可结合 Redis 等缓存技术提高性能,并使用更安全的短码生成算法(如 UUID)。