Невозможно загрузить куки в cookiejar из-за недопустимого символа - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь добавить файл cookie в постоянное хранилище и получить его, чтобы проанализировать сайт, на который необходимо войти.

Я получаю свой файл cookie с расширением и добавляю его в мой cookiejar с помощью juju cookiejar , который читает файл cookie по умолчанию из env vars, но я получаю сообщение об ошибке cannot load cookies: invalid character 'c' looking for beginning of value c - , представляющий первый символ в текстовом файле . Мне интересно, правильно ли я анализирую это или нет.

<!-- 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
}

1 Ответ

0 голосов
/ 21 июня 2019

Джуджу ожидает, что куки будут сохранены в формате 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.

...