專業(yè)的短鏈接生成工具
鏈接域名
短網(wǎng)址有效期
短網(wǎng)址
更新時間:2025-4-19 13:01:22 作者:愛短鏈
短網(wǎng)址(Short URL)是一種將長網(wǎng)址壓縮為較短字符串的技術,用于簡化鏈接分享、節(jié)省字符空間(如社交媒體或短信)以及隱藏原始網(wǎng)址。其核心原理包括以下步驟:生成唯一標識:
使用哈希算法(如 MD5、SHA-1)對長網(wǎng)址生成固定長度的哈希值。
或通過自增 ID 生成器分配唯一編號,并將其轉(zhuǎn)換為短字符串(如 Base62 編碼)。
存儲映射關系:
將長網(wǎng)址與短字符串的映射關系存儲在數(shù)據(jù)庫中(如 MySQL、Redis)。
重定向服務:
當用戶訪問短網(wǎng)址時,服務端查詢數(shù)據(jù)庫獲取對應的長網(wǎng)址,并通過 HTTP 302 狀態(tài)碼重定向到原始地址。
實現(xiàn)短網(wǎng)址的源代碼示例(Python + Flask)
以下是一個簡單的短網(wǎng)址生成器實現(xiàn),使用 Flask 框架和 SQLite 數(shù)據(jù)庫:
python
import sqlite3 | |
import string | |
import random | |
from flask import Flask, request, redirect, jsonify | |
app = Flask(__name__) | |
# 數(shù)據(jù)庫初始化 | |
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)) | |
# 生成短網(wǎng)址 | |
@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 | |
# 插入數(shù)據(jù)庫 | |
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}) | |
# 重定向到原始網(wǎng)址 | |
@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) |
代碼說明
數(shù)據(jù)庫:
使用 SQLite 存儲長網(wǎng)址與短碼的映射關系。
表結(jié)構(gòu)包含 id(自增主鍵)、original_url(原始網(wǎng)址)、short_code(短碼)。
短碼生成:
使用 random.choices 從字母和數(shù)字中隨機選擇字符,生成固定長度的短碼。
短碼長度默認為 6,可根據(jù)需求調(diào)整。
API 接口:
/shorten:接收長網(wǎng)址并返回對應的短網(wǎng)址。
/<short_code>:根據(jù)短碼重定向到原始網(wǎng)址。
錯誤處理:
檢查輸入?yún)?shù)是否合法。
防止短碼重復生成。
使用方法
安裝依賴:
bash
pip install flask |
運行服務:
bash
python app.py |
測試接口:
生成短網(wǎng)址:
bash
curl -X POST -H "Content-Type: application/json" -d '{"url": "https://example.com"}' http://localhost:5000/shorten |
訪問短網(wǎng)址:
在瀏覽器中打開生成的短網(wǎng)址,例如 http://localhost:5000/abc123。
擴展功能
自定義短碼:
允許用戶指定短碼,并檢查是否已存在。
點擊統(tǒng)計:
記錄每個短網(wǎng)址的訪問次數(shù)和訪問來源。
過期時間:
為短網(wǎng)址設置有效期,過期后自動刪除。
API 文檔:
使用 Swagger 或 Postman 提供 API 文檔。
總結(jié)
短網(wǎng)址的核心在于唯一標識生成和映射關系存儲。上述示例提供了一個基礎實現(xiàn),可根據(jù)需求擴展功能,如自定義短碼、點擊統(tǒng)計等。實際應用中,可結(jié)合 Redis 等緩存技術提高性能,并使用更安全的短碼生成算法(如 UUID)。