searchPage 搜索指定页面
(client *http.Client, encodedKeyword string, page int)
| 339 | |
| 340 | // searchPage 搜索指定页面 |
| 341 | func (p *Fox4kPlugin) searchPage(client *http.Client, encodedKeyword string, page int) ([]model.SearchResult, int, error) { |
| 342 | debugPrintf("🔧 [Fox4k DEBUG] searchPage 开始 - 第%d页, keyword: %s\n", page, encodedKeyword) |
| 343 | |
| 344 | // 1. 构建搜索URL |
| 345 | var searchURL string |
| 346 | if page == 1 { |
| 347 | searchURL = fmt.Sprintf(SearchURL, encodedKeyword) |
| 348 | } else { |
| 349 | searchURL = fmt.Sprintf(SearchPageURL, encodedKeyword, page) |
| 350 | } |
| 351 | |
| 352 | debugPrintf("🔧 [Fox4k DEBUG] 构建的URL: %s\n", searchURL) |
| 353 | |
| 354 | // 2. 创建带超时的上下文 |
| 355 | ctx, cancel := context.WithTimeout(context.Background(), DefaultTimeout) |
| 356 | defer cancel() |
| 357 | |
| 358 | // 3. 创建请求 |
| 359 | req, err := http.NewRequestWithContext(ctx, "GET", searchURL, nil) |
| 360 | if err != nil { |
| 361 | return nil, 0, fmt.Errorf("[%s] 创建请求失败: %w", p.Name(), err) |
| 362 | } |
| 363 | |
| 364 | // 4. 设置完整的请求头(包含随机UA和IP) |
| 365 | randomUA := getRandomUA() |
| 366 | randomIP := generateRandomIP() |
| 367 | |
| 368 | req.Header.Set("User-Agent", randomUA) |
| 369 | req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") |
| 370 | req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8") |
| 371 | req.Header.Set("Connection", "keep-alive") |
| 372 | req.Header.Set("Upgrade-Insecure-Requests", "1") |
| 373 | req.Header.Set("Cache-Control", "max-age=0") |
| 374 | req.Header.Set("Referer", BaseURL+"/") |
| 375 | req.Header.Set("X-Forwarded-For", randomIP) |
| 376 | req.Header.Set("X-Real-IP", randomIP) |
| 377 | req.Header.Set("sec-ch-ua-platform", "macOS") |
| 378 | |
| 379 | debugPrintf("🔧 [Fox4k DEBUG] 使用随机UA: %s\n", randomUA) |
| 380 | debugPrintf("🔧 [Fox4k DEBUG] 使用随机IP: %s\n", randomIP) |
| 381 | |
| 382 | // 5. 发送HTTP请求 |
| 383 | debugPrintf("🔧 [Fox4k DEBUG] 开始发送HTTP请求到: %s\n", searchURL) |
| 384 | debugPrintf("🔧 [Fox4k DEBUG] 请求头信息:\n") |
| 385 | if DebugMode { |
| 386 | for key, values := range req.Header { |
| 387 | for _, value := range values { |
| 388 | debugPrintf(" %s: %s\n", key, value) |
| 389 | } |
| 390 | } |
| 391 | } |
| 392 | |
| 393 | startTime := time.Now() |
| 394 | resp, err := p.doRequestWithRetry(req, client) |
| 395 | requestDuration := time.Since(startTime) |
| 396 | |
| 397 | if err != nil { |
| 398 | debugPrintf("❌ [Fox4k DEBUG] HTTP请求失败 (耗时: %v): %v\n", requestDuration, err) |
no test coverage detected