title.go
1 // Copyright (c) 2024-2026 Tencent Zhuque Lab. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // 15 // Requirement: Any integration or derivative work must explicitly attribute 16 // Tencent Zhuque Lab (https://github.com/Tencent/AI-Infra-Guard) in its 17 // documentation or user interface, as detailed in the NOTICE file. 18 19 // Package httpx title 20 package httpx 21 22 import ( 23 "regexp" 24 "strings" 25 26 "golang.org/x/net/html" 27 ) 28 29 // ExtractTitle from a response 30 func ExtractTitle(resp string) (title string) { 31 var re = regexp.MustCompile(`(?im)<\s*title.*>(.*?)<\s*/\s*title>`) 32 for _, match := range re.FindAllString(resp, -1) { 33 title = html.UnescapeString(trimTitleTags(match)) 34 break 35 } 36 return 37 } 38 39 func trimTitleTags(title string) string { 40 // trim <title>*</title> 41 titleBegin := strings.Index(title, ">") 42 titleEnd := strings.Index(title, "</") 43 return title[titleBegin+1 : titleEnd] 44 }