w w w . w d . c h a t
🗣 Wd提问
短网址生成源码
🤖 Ai回答
短网址生成源码

以下是一个简单的短网址生成服务的实现代码,使用Python和Flask框架:

基础版本(使用哈希算法)

python
import hashlib
from flask import Flask, request, redirect, jsonify

app = Flask(__name__)

存储短网址和原始网址的映射
url_mapping = {}

def generate_short_url(original_url):
使用MD5哈希生成短码
hash_object = hashlib.md5(original_url.encode())
hex_dig = hash_object.hexdigest()
取前8个字符作为短码
return hex_dig[:8]

@app.route('/shorten', methods=['POST'])
def shorten_url():
original_url = request.json.get('url')
if not original_url:
return jsonify({'error': 'URL is required'}), 400

short_code = generate_short_url(original_url)
url_mapping[short_code] = original_url

short_url = fhttp://localhost:5000/{short_code}
return jsonify({'short_url': short_url})

@app.route('/<short_code')
def redirect_to_original(short_code):
original_url = url_mapping.get(short_code)
if original_url:
return redirect(original_url)
else:
return jsonify({'error': 'Short URL not found'}), 404

if __name__ == '__main__':
app.run(debug=True)

进阶版本(使用数据库和自增ID)

python
import sqlite3
from flask import Flask, request, redirect, jsonify

app = Flask(__name__)
DATABASE = 'url_shortener.db'

def get_db():
db = sqlite3.connect(DATABASE)
db.row_factory = sqlite3.Row
return db

def init_db():
with app.app_context():
db = get_db()
db.execute('''
CREATE TABLE IF NOT EXISTS urls (
id INTEGER PRIMARY KEY AUTOINCREMENT,
original_url TEXT NOT NULL,
short_code TEXT NOT NULL UNIQUE
)
''')
db.commit()

def base62_encode(number):
characters = 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
base = len(characters)
result = []

if number == 0:
return characters[0]

while number 0:
result.append(characters[number % base])
number = number // base

return ''.join(reversed(result))

@app.route('/shorten', methods=['POST'])
def shorten_url():
original_url = request.json.get('url')
if not original_url:
return jsonify({'error': 'URL is required'}), 400

db = get_db()
cursor = db.cursor()

检查URL是否已存在
cursor.execute('SELECT short_code FROM urls WHERE original_url = ?', (original_url,))
existing = cursor.fetchone()

if existing:
short_code = existing['short_code']
else:
插入新URL并获取ID
cursor.execute('INSERT INTO urls (original_url, short_code) VALUES (?, ?)',
(original_url, ''))
url_id = cursor.lastrowid

生成短码
short_code = base62_encode(url_id)

更新短码
cursor.execute('UPDATE urls SET short_code = ? WHERE id = ?', (short_code, url_id))

db.commit()
db.close()

short_url = fhttp://localhost:5000/{short_code}
return jsonify({'short_url': short_url})

@app.route('/<short_code')
def redirect_to_original(short_code):
db = get_db()
cursor = db.cursor()

cursor.execute('SELECT original_url FROM urls WHERE short_code = ?', (short_code,))
url = cursor.fetchone()
db.close()

if url:
return redirect(url['original_url'])
else:
return jsonify({'error': 'Short URL not found'}), 404

if __name__ == '__main__':
init_db()
app.run(debug=True)

使用说明

1、基础版本:
使用内存存储URL映射
通过MD5哈希生成短码
简单但不适合生产环境

2、进阶版本:
使用SQLite数据库持久化存储
使用自增ID和base62编码生成短码
避免哈希冲突
检查重复URL

部署建议

1、对于生产环境,建议:
使用更强大的数据库如PostgreSQL或MySQL
添加URL验证
实现过期机制
添加统计功能(点击次数等)
使用缓存(如Redis)提高性能
添加API限流

2、可以使用Nginx或Apache作为反向代理
3、考虑使用Docker容器化部署

需要更复杂的功能或特定语言的实现,可以进一步扩展此代码。
0
📍
IP地址 179.128.103.131
🔍
搜索次数 53
提问时间 2025-01-21 15:10:45

📣 商家广告

贵阳用友软件

贵阳用友软件

广告招商

广告招商

求名

求名

🛒 域名购买

热门提问

🌐 域名评估

最新挖掘

🖌 热门作画

🤝 关于我们

🗨 加入群聊
💬选择任意群聊,与同好交流分享

🔗 友情链接

🧰

站长工具

📢

温馨提示

本站所有 ❓️ 问答 由Ai自动创作,内容仅供参考,若有误差请用"联系"里面信息通知我们人工修改或删除。

👉

技术支持

本站由 🟢 豌豆Ai 提供技术支持,使用的最新版: 《豌豆Ai站群搜索引擎系统 V.25.10.25》 搭建本站。

上一篇 337537 337538 337539 下一篇