我正在尝试将cookie添加到持久性存储中并对其进行检索,以分析需要登录的站点。
我从extension获取cookie,并使用juju cookiejar将其添加到cookiejar中,该ojit_a从env vars中读取默认的cookie文件,但是我不断收到错误cannot load cookies: invalid character 'c' looking for beginning of value
c
-,该错误表示txt文件中的第一个字符。
我想知道我是否正确解析了这个。
<!-- language: lang-go -->
func main(){
jujujar, err := cookiejar.New(&cookiejar.Options{
Filename: cookiejar.DefaultCookieFile(),
})
if err != nil {
panic(err)
}
client := &http.Client{
Jar: jujujar,
}
response, err := client.Get("https://example.com/categories/ProductList.aspx?Category=someCategories")
if err != nil {
panic(err)
}
query, err := goquery.NewDocumentFromResponse(response)
if err != nil {
panic(err)
}
myQuery := query.Find("body a").Each(func(index int, item *goquery.Selection) {
linkTag := item
link, _ := linkTag.Attr("href")
linkText := linkTag.Text()
fmt.Printf("Link #%d: '%s' - '%s'\n", index, linkText, link)
})
fmt.Print(myQuery)
}
更新,好像该库正在寻找Json数据:
// mergeFrom reads all the cookies from r and stores them in the Jar.
func (j *Jar) mergeFrom(r io.Reader) error {
decoder := json.NewDecoder(r)
// Cope with old cookiejar format by just discarding
// cookies, but still return an error if it's invalid JSON.
var data json.RawMessage
if err := decoder.Decode(&data); err != nil {
if err == io.EOF {
// Empty file.
return nil
}
return err
}
var entries []entry
if err := json.Unmarshal(data, &entries); err != nil {
log.Printf("warning: discarding cookies in invalid format (error: %v)", err)
return nil
}
j.merge(entries)
return nil
}
最佳答案
Juju希望将cookie以JSON格式保存:
https://github.com/juju/persistent-cookiejar/blob/master/serialize.go
JSON需要反序列化为此处定义的[]entry
:
https://github.com/juju/persistent-cookiejar/blob/master/jar.go#L140
该插件似乎以以下格式保存Cookie:[domain] / [true or false] / [true or false] / [Epoch date/time] / [name] / [content]
不确定是对还是假,但是您基本上需要解析这些行并将它们映射到您自己的Entry
结构(因为不会导出它们)-您可以使用带有自定义定界符的CSV解析器,然后对其进行序列化JSON,然后使用您创建的JSON传递给Juju。