🎯 GetSecurityAdvisoriesForPackages
获取指定一批包的安全公告(按包名分组)。
何时使用
🎯 已知项目直接依赖列表,只关心这些包的漏洞时;🚀 CI 流水线在 composer install 后批量校验依赖安全;🔎 针对某个 vendor 做专项排查。
签名
go
func (c *ComposerClient) GetSecurityAdvisoriesForPackages(packageNames []string) (*domain.AdvisoriesResponse, error)参数
| 参数 | 类型 | 说明 |
|---|---|---|
packageNames | []string | 包名列表,如 []string{"symfony/http-foundation", "guzzlehttp/guzzle"} |
返回值
| 值 | 类型 | 说明 |
|---|---|---|
| 结果 | *domain.AdvisoriesResponse | Advisories 为 map[包名][]*Advisory,仅含请求的包 |
| 错误 | error | HTTP 失败、非 200、JSON 解析失败时返回 |
对应端点:GET https://packagist.org/api/security-advisories/?packages[]={pkg}&packages[]={pkg}。
示例
go
package main
import (
"fmt"
"log"
"time"
"github.com/scagogogo/composer-skills/pkg/client"
)
func main() {
c := client.NewComposerClient(30 * time.Second)
resp, err := c.GetSecurityAdvisoriesForPackages([]string{
"symfony/http-foundation",
"guzzlehttp/guzzle",
})
if err != nil {
log.Fatal(err)
}
for pkg, advisories := range resp.Advisories {
fmt.Printf("%s: %d 条公告\n", pkg, len(advisories))
for _, a := range advisories {
fmt.Printf(" - %s 影响版本 %s\n", a.Title, a.AffectedVersions)
}
}
}进阶
- 🔒 拉取全部公告用
GetSecurityAdvisories。 - ⏱️ 按时间增量同步用
GetSecurityAdvisoriesSince。 - 📦 包名全集可先通过
ListPackages获取再过滤。