🗣 SL提问: 短链接源码
✍️ Ai批改: 短链接(Short URL)系统的核心原理是将一个较长的URL转换为一个较短、易传播的形式。通常使用哈希算法或自增ID生成短字符串,然后存储长链与短链的映射关系。
下面是一个简单的短链接系统的 Python 实现示例(基于 Flask + SQLite):
-
✅ 功能说明
用户提交一个长链接。
系统为其生成一个唯一的短链接(如:`example.co/abc123`)。
当用户访问该短链接时,重定向到原始的长链接。
-
📁 文件结构(可选)
short_url/
├── app.py
├── database.db
└── README.md
-
🔧 示例代码 `app.py`
python
from flask import Flask, request, redirect, jsonify
import sqlite3
import hashlib
import base64
app = Flask(__name__)
DB_NAME = 'database.db'
初始化数据库
def init_db():
with sqlite3.connect(DB_NAME) as conn:
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS urls (
id INTEGER PRIMARY KEY AUTOINCREMENT,
long_url TEXT NOT NULL,
short_url TEXT NOT NULL UNIQUE
)
''')
conn.commit()
生成短链接
def generate_short_url(long_url):
使用 MD5 哈希并取前6位
hash_obj = hashlib.md5(long_url.encode())
digest = hash_obj.digest()
Base64 编码缩短长度
short = base64.urlsafe_b64encode(digest).decode()[:6]
return short
插入数据到数据库
def insert_url(long_url, short_url):
with sqlite3.connect(DB_NAME) as conn:
cursor = conn.cursor()
try:
cursor.execute(INSERT INTO urls (long_url, short_url) VALUES (?, ?),
(long_url, short_url))
conn.commit()
return True
except sqlite3.IntegrityError:
短链接冲突,重新生成
return False
查询原始链接
def get_long_url(short_url):
with sqlite3.connect(DB_NAME) as conn:
cursor = conn.cursor()
cursor.execute(SELECT long_url FROM urls WHERE short_url=?, (short_url,))
result = cursor.fetchone()
return result[0] if result else None
@app.route('/shorten', methods=['POST'])
def shorten_url():
data = request.get_json()
long_url = data.get('url')
if not long_url:
return jsonify({error: Missing URL}), 400
short_url = generate_short_url(long_url)
处理冲突
while not insert_url(long_url, short_url):
short_url = generate_short_url(long_url + short_url)
return jsonify({
original_url: long_url,
shortened_url: fhttp://localhost:5000/{short_url}
})
@app.route('/<short_url')
def redirect_to_url(short_url):
long_url = get_long_url(short_url)
if long_url:
return redirect(long_url)
else:
return jsonify({error: URL not found}), 404
if __name__ == '__main__':
init_db()
app.run(debug=True)
-
🚀 运行步骤
1、安装依赖:
bash
pip install flask
2、启动服务:
bash
python app.py
3、发送 POST 请求生成短链接:
bash
curl -X POST http://localhost:5000/shorten -H Content-Type: application/json -d '{url:https://www.example.com/really-long-path?query=12345}'
4、访问短链接即可跳转。
-
💡 可拓展功能建议
使用 Redis 缓存提高性能。
支持自定义短链接。
添加访问统计和日志记录。
使用雪花算法或自增 ID 替代哈希。
部署到服务器,使用 Nginx 做反向代理。
提供前端页面进行交互。
-
如果你需要某个语言版本(如 PHP、Java、Node.js),或者想要开源项目推荐(如 Bitly 的开源实现),我也可以提供。欢迎继续提问!
0
IP地址: 183.2.61.194
搜索次数: 25
提问时间: 2025-07-09 15:34:57
❓️ 热门提问:
ai免费画师
东京黄金期货
外汇差价
乾坤圈黄金吊坠
帮我写文章ai
山东黄金属于什么行业
工商银行金条100克今天价格
金吊坠和金项链的区别
黄金理财交易平台
小说转ai视频
豌豆Ai站群搜索引擎系统
🤝 关于我们:
三乐Ai
作文批改
英语分析
在线翻译
拍照识图
Ai提问
英语培训
本站流量
联系我们
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.05.20》搭建本站。