kooky
Reaching into browser-specific, vaguely documented, possibly
concurrently modified cookie stores to pilfer cookies is a bad idea.
Since you've arrived here, you're almost certainly going to do it
anyway. Me too. And if we're going to do the Wrong Thing, at least
let's try to Do it Right.
Package kooky contains routines to reach into cookie stores for Chrome, Firefox, Safari, ... and retrieve the cookies.
It aspires to be pure Go (I spent quite a while making
go-sqlite/sqlite3 work for
it).
It also aspires to work for all major browsers, on all three
major platforms.
Status
Basic functionality works on Windows, MacOS and Linux.
Some functions might not yet be implemented on some platforms.
The API is currently not expected to be at all stable.
PRs more than welcome.
TODOs
Example usage
Any Browser - Cookie Filter Usage
package main
import (
"fmt"
"github.com/browserutils/kooky"
_ "github.com/browserutils/kooky/browser/all"
)
func main() {
cookies := kooky.ReadCookies(kooky.Valid, kooky.DomainHasSuffix(`google.com`), kooky.Name(`NID`))
for _, cookie := range cookies {
fmt.Println(cookie.Domain, cookie.Name, cookie.Value)
}
}
Chrome on macOS
package main
import (
"fmt"
"log"
"os"
"github.com/browserutils/kooky/browser/chrome"
)
func main() {
dir, _ := os.UserConfigDir()
cookiesFile := dir + "/Google/Chrome/Default/Cookies"
cookies, err := chrome.ReadCookies(cookiesFile)
if err != nil {
log.Fatal(err)
}
for _, cookie := range cookies {
fmt.Println(cookie)
}
}
Safari
package main
import (
"fmt"
"log"
"os"
"github.com/browserutils/kooky/browser/safari"
)
func main() {
dir, _ := os.UserHomeDir()
cookiesFile := dir + "/Library/Containers/com.apple.Safari/Data/Library/Cookies/Cookies.binarycookies"
cookies, err := safari.ReadCookies(cookiesFile)
if err != nil {
log.Fatal(err)
}
for _, cookie := range cookies {
fmt.Println(cookie)
}
}
Thanks/references