page_shot / test-hf-api.sh
CatPtain's picture
Upload 4 files
4f43bf9 verified
#!/bin/bash
# HF Spaces Screenshot API 测试脚本
# 使用方法: ./test-hf-api.sh [SPACE_URL] [HF_TOKEN]
# 配置
SPACE_URL="${1:-https://your-username-your-space-name.hf.space}"
HF_TOKEN="${2:-}"
TEST_URL="https://www.baidu.com"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}🚀 HF Spaces Screenshot API 测试工具${NC}"
echo "======================================"
echo "Space URL: $SPACE_URL"
echo "Token: ${HF_TOKEN:+已设置}${HF_TOKEN:-未设置}"
echo ""
# 构建认证头
AUTH_HEADER=""
if [ ! -z "$HF_TOKEN" ]; then
if [[ $HF_TOKEN == hf_* ]]; then
AUTH_HEADER="Authorization: Bearer $HF_TOKEN"
echo -e "${GREEN}✅ 使用 HF Token 认证${NC}"
else
AUTH_HEADER="X-API-Key: $HF_TOKEN"
echo -e "${GREEN}✅ 使用自定义 API Key 认证${NC}"
fi
else
echo -e "${YELLOW}⚠️ 无认证信息,使用公开访问${NC}"
fi
echo ""
# 测试 1: 健康检查
echo -e "${BLUE}📋 测试 1: 健康检查${NC}"
echo "GET $SPACE_URL/"
echo ""
if [ ! -z "$AUTH_HEADER" ]; then
HEALTH_RESPONSE=$(curl -s -w "HTTP_CODE:%{http_code}" -H "$AUTH_HEADER" "$SPACE_URL/")
else
HEALTH_RESPONSE=$(curl -s -w "HTTP_CODE:%{http_code}" "$SPACE_URL/")
fi
HTTP_CODE=$(echo "$HEALTH_RESPONSE" | grep -o "HTTP_CODE:[0-9]*" | cut -d: -f2)
RESPONSE_BODY=$(echo "$HEALTH_RESPONSE" | sed 's/HTTP_CODE:[0-9]*$//')
if [ "$HTTP_CODE" -eq 200 ]; then
echo -e "${GREEN}✅ 健康检查成功 (HTTP $HTTP_CODE)${NC}"
echo "$RESPONSE_BODY" | python3 -m json.tool 2>/dev/null || echo "$RESPONSE_BODY"
else
echo -e "${RED}❌ 健康检查失败 (HTTP $HTTP_CODE)${NC}"
echo "$RESPONSE_BODY"
fi
echo ""
echo "======================================"
# 测试 2: 状态检查
echo -e "${BLUE}📊 测试 2: 状态检查${NC}"
echo "GET $SPACE_URL/status"
echo ""
if [ ! -z "$AUTH_HEADER" ]; then
STATUS_RESPONSE=$(curl -s -w "HTTP_CODE:%{http_code}" -H "$AUTH_HEADER" "$SPACE_URL/status")
else
STATUS_RESPONSE=$(curl -s -w "HTTP_CODE:%{http_code}" "$SPACE_URL/status")
fi
HTTP_CODE=$(echo "$STATUS_RESPONSE" | grep -o "HTTP_CODE:[0-9]*" | cut -d: -f2)
RESPONSE_BODY=$(echo "$STATUS_RESPONSE" | sed 's/HTTP_CODE:[0-9]*$//')
if [ "$HTTP_CODE" -eq 200 ]; then
echo -e "${GREEN}✅ 状态检查成功 (HTTP $HTTP_CODE)${NC}"
echo "$RESPONSE_BODY" | python3 -m json.tool 2>/dev/null || echo "$RESPONSE_BODY"
else
echo -e "${RED}❌ 状态检查失败 (HTTP $HTTP_CODE)${NC}"
echo "$RESPONSE_BODY"
fi
echo ""
echo "======================================"
# 测试 3: 截图测试
echo -e "${BLUE}📸 测试 3: 截图测试${NC}"
echo "POST $SPACE_URL/screenshot"
echo "目标URL: $TEST_URL"
echo ""
# 准备请求数据
REQUEST_DATA='{
"url": "'$TEST_URL'",
"width": 1280,
"height": 720,
"quality": 75
}'
echo "请求数据:"
echo "$REQUEST_DATA" | python3 -m json.tool 2>/dev/null || echo "$REQUEST_DATA"
echo ""
# 执行截图请求
START_TIME=$(date +%s.%N)
if [ ! -z "$AUTH_HEADER" ]; then
curl -X POST "$SPACE_URL/screenshot" \
-H "Content-Type: application/json" \
-H "$AUTH_HEADER" \
-d "$REQUEST_DATA" \
-w "HTTP_CODE:%{http_code}\nTIME_TOTAL:%{time_total}s\nSIZE_DOWNLOAD:%{size_download} bytes\n" \
-o "test_screenshot_$(date +%s).jpg" \
-s > curl_output.tmp
else
curl -X POST "$SPACE_URL/screenshot" \
-H "Content-Type: application/json" \
-d "$REQUEST_DATA" \
-w "HTTP_CODE:%{http_code}\nTIME_TOTAL:%{time_total}s\nSIZE_DOWNLOAD:%{size_download} bytes\n" \
-o "test_screenshot_$(date +%s).jpg" \
-s > curl_output.tmp
fi
# 解析结果
HTTP_CODE=$(grep "HTTP_CODE:" curl_output.tmp | cut -d: -f2)
TIME_TOTAL=$(grep "TIME_TOTAL:" curl_output.tmp | cut -d: -f2)
SIZE_DOWNLOAD=$(grep "SIZE_DOWNLOAD:" curl_output.tmp | cut -d: -f2 | cut -d' ' -f1)
if [ "$HTTP_CODE" -eq 200 ]; then
echo -e "${GREEN}✅ 截图成功 (HTTP $HTTP_CODE)${NC}"
echo "⏱️ 响应时间: $TIME_TOTAL"
echo "📦 文件大小: $SIZE_DOWNLOAD bytes ($(echo "scale=1; $SIZE_DOWNLOAD/1024" | bc)KB)"
echo "💾 保存位置: test_screenshot_$(date +%s).jpg"
# 检查文件是否存在且大小合理
LATEST_FILE=$(ls -t test_screenshot_*.jpg 2>/dev/null | head -1)
if [ -f "$LATEST_FILE" ] && [ -s "$LATEST_FILE" ]; then
FILE_SIZE=$(stat -f%z "$LATEST_FILE" 2>/dev/null || stat -c%s "$LATEST_FILE" 2>/dev/null)
echo "✅ 文件验证通过,大小: ${FILE_SIZE} bytes"
else
echo -e "${YELLOW}⚠️ 文件可能损坏或为空${NC}"
fi
else
echo -e "${RED}❌ 截图失败 (HTTP $HTTP_CODE)${NC}"
# 显示错误信息
SCREENSHOT_FILE=$(ls -t test_screenshot_*.jpg 2>/dev/null | head -1)
if [ -f "$SCREENSHOT_FILE" ]; then
echo "错误信息:"
cat "$SCREENSHOT_FILE"
fi
fi
# 清理临时文件
rm -f curl_output.tmp
echo ""
echo "======================================"
# 测试总结
echo -e "${BLUE}📋 测试总结${NC}"
echo ""
if [ "$HTTP_CODE" -eq 200 ]; then
echo -e "${GREEN}🎉 所有测试通过!API 工作正常${NC}"
echo ""
echo "💡 使用建议:"
echo " - 可以在生产环境中使用此 API"
echo " - 建议设置适当的速率限制"
echo " - 监控服务器资源使用情况"
if [ -z "$HF_TOKEN" ]; then
echo ""
echo -e "${YELLOW}🔐 安全建议: 考虑将 Space 设为私有并使用 HF Token${NC}"
fi
else
echo -e "${RED}❌ 测试失败,请检查以下问题:${NC}"
echo " 1. Space URL 是否正确"
echo " 2. Space 是否正在运行"
echo " 3. 是否需要认证 token"
echo " 4. 网络连接是否正常"
fi
echo ""
echo "🔗 更多信息:"
echo " - Demo界面: $SPACE_URL/demo"
echo " - API文档: 查看 README.md"
echo " - 健康检查: $SPACE_URL/"