白票ubuntu图床

先去https://discourse.ubuntu.com注册个账号
图片会被压缩,但不影响质量

from flask import Flask, request, jsonify
import requests
from bs4 import BeautifulSoup
import hashlib

app = Flask(__name__)

# 定义请求头部信息和cookie
headers = {
"Cookie": "随便注册个账号获取cookie",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
}

# 获取CSRF令牌
def get_csrf_token():
url = "https://discourse.ubuntu.com/top?period=weekly"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
csrf_token = soup.find("meta", attrs={"name": "csrf-token"})["content"]
return csrf_token

# Upload image
def upload_image(file, csrf_token):
url = "https://discourse.ubuntu.com/uploads.json?client_id=123"
headers.update({"X-CSRF-Token": csrf_token})

try:
# Calculate file's SHA-1 checksum
sha1 = hashlib.sha1()
while True:
data = file.read(65536) # Read in 64k chunks
if not data:
break
sha1.update(data)
file.seek(0) # Reset file pointer after reading

files = {'file': file}

data = {
"upload_type": "composer",
"pasted": "undefined",
"name": file.filename,
"type": file.content_type,
"sha1_checksum": sha1.hexdigest()
}

response = requests.post(url, headers=headers, data=data, files=files)
response.raise_for_status()
return response.json()
except requests.RequestException as e:
# Log the error or handle it gracefully
return None

@app.route('/upload', methods=['POST'])
def upload():
if 'file' not in request.files:
return jsonify({"error": "No file part"}), 400

file = request.files['file']
if file.filename == '':
return jsonify({"error": "No selected file"}), 400

csrf_token = get_csrf_token()
response = upload_image(file, csrf_token)

if 'url' in response:
return jsonify({"url": response['url']}), 200
else:
return jsonify({"error": "URL not found in the response", "response": response}), 400

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

上传方式
curl -X POST -F “file=@/path/to/your/file.jpg” http://localhost:5000/upload
自定义端口
把末尾的app.run(debug=True)
替换成app.run(debug=True, port=8080)

Related Post

发表回复