Como uso os cookies do Firefox com o Wget?


15

wget --load-cookiescarregará os cookies como um "arquivo de texto no formato originalmente usado pelo arquivo cookies.txt do Netscape". No entanto, o Firefox mantém seus cookies em um banco de dados SQLite .

Existe uma maneira de extrair o "arquivo cookies.txt do Netscape" do cookies.sqlitearquivo Firefox ?

Respostas:


12

Existem extensões exportadoras de cookies que você pode usar para exportar um arquivo no formato cookie.txt que pode ser usado com o wget.

Como alternativa, você pode criar seus próprios. Os cookies podem ser visualizados em Options / Privacy / remove individual cookies. Você pode encontrar o cookie que procura e criar um arquivo .txt contendo as informações:

domain - The domain that created AND that can read the variable. 
flag - A TRUE/FALSE value indicating if all machines within a given domain can access the variable.  Say "true" 
path - The path within the domain that the variable is valid for.  Use / for any url
secure - A TRUE/FALSE value indicating if a secure connection with the domain is needed to access the variable. Use false to allow http://
expiration - The UNIX time that the variable will expire on.  Set something far in the future
name - The name of the variable. 
value - The value of the variable.

Então, pode-se parecer com isso, por exemplo:

.domain.com TRUE  / FALSE 4102358400 SESSIONID dfjdfkjsjwere090fusfdkljf

1
A extensão Export Cookies para Firefox parece funcionar bem.
mivk

2
Infelizmente, as versões mais recentes do FF tornarão isso mais trabalhoso - ele não parece suportar multiprocessos e é legado; portanto, parará de funcionar no FF 57+.
SomeoneSomewhereSupportsMonica

8

Se você estiver usando wget, provavelmente está confortável na linha de comando. Nesse caso, em vez de uma extensão do Firefox, você pode usar um simples script de shell:

extract_cookies.sh > mycookies.txt
wget --load-cookies mycookies.txt examplehost.com

Você pode fazer o download do script extract_cookies.sh em https://gist.github.com/hackerb9/d382e09683a52dcac492ebcdaf1b79af ou recortar e colar o seguinte:

#!/bin/sh -e
# extract_cookies.sh:
#
# Convert from Firefox's cookies.sqlite format to Netscape cookies,
# which can then be used by wget and curl. (Why don't wget and curl
# just use libsqlite if it's installed? Mysteries abound.)

# USAGE:
#
# $ extract_cookies.sh > /tmp/cookies.txt
# or
# $ extract_cookies.sh ~/.mozilla/firefox/*default*/cookies.sqlite > /tmp/cookies.txt

# USING WITH WGET:
# $ wget --load-cookies=/tmp/cookies.txt http://example.com

# USING WITH CURL:
# $ curl --cookie /tmp/cookies.txt http://example.com

# Note: If you do not specify an SQLite filename, this script will
# intelligently find it for you.
#
# A) Usually it will check all profiles under ~/.mozilla/firefox/ and
# use the cookies.sqlite that was updated most recently.
#
# B) If you've redirected stdin (with < or |) , then that will be used.


# HISTORY: I believe this is circa 2010 from:
# http://slacy.com/blog/2010/02/using-cookies-sqlite-in-wget-or-curl/
# However, that site is down now.

# Cleaned up by Hackerb9 (2017) to be more robust and require less typing.


cleanup() {
    rm -f $TMPFILE
    exit 0
}
trap cleanup  EXIT INT QUIT TERM


if [ "$#" -ge 1 ]; then
    SQLFILE="$1"
else
    if tty -s; then
    SQLFILE=$(ls -t ~/.mozilla/firefox/*/cookies.sqlite | head -1)
    else
    SQLFILE="-"     # Will use 'cat' below to read stdin
    fi
fi

if [ "$SQLFILE" != "-" -a ! -r "$SQLFILE" ]; then
    echo "Error. File $SQLFILE is not readable." >&2
    exit 1
fi

# We have to copy cookies.sqlite, because FireFox has a lock on it
TMPFILE=`mktemp /tmp/cookies.sqlite.XXXXXXXXXX`
cat "$SQLFILE" >> $TMPFILE


# This is the format of the sqlite database:
# CREATE TABLE moz_cookies (id INTEGER PRIMARY KEY, name TEXT, value TEXT, host TEXT, path TEXT,expiry INTEGER, lastAccessed INTEGER, isSecure INTEGER, isHttpOnly INTEGER);

echo "# Netscape HTTP Cookie File"
sqlite3 -separator $'\t' $TMPFILE <<- EOF
    .mode tabs
    .header off
    select host,
    case substr(host,1,1)='.' when 0 then 'FALSE' else 'TRUE' end,
    path,
    case isSecure when 0 then 'FALSE' else 'TRUE' end,
    expiry,
    name,
    value
    from moz_cookies;
EOF

cleanup

1
Isso não funciona para cookies que são mantidos apenas durante uma determinada sessão do navegador. (assim probalby todos os cookies de sessão)
Krzysztof Krason

Eu envolvi isso em um comando chamado curlfire . curlfire http://www.example.com/eculfire -P newprofile http://www.example.com
Att Righ

1
Isso é ótimo. Não interfere no multiprocesso ou nas versões mais recentes do FF e pode ser script.
Home

1

A maneira como você encontra o arquivo sqlite não funciona na maioria dos sistemas.

E se você tiver vários arquivos sqlite porque possui vários perfis do Firefox.

Então, aqui está como eu faço:

Obtenha todos os arquivos cookies.sqlite, classifique-os pelo número da linha e assuma que aquele com mais linhas é o que você realmente está usando. Em seguida, retorne o caminho para esse arquivo.

Então eu mudei sua linha para isso:

SQLFILE=$(find ~ -type f -name cookies.sqlite -exec wc -l {} \+ | sort -rn |grep -v total| head -1 |egrep -o "/.*")

Interessante. Então, qual versão do Firefox você está usando para que meu script não encontre todos os perfis por padrão? Onde os cookies estão sendo armazenados? Certamente, você não precisa procurar no diretório pessoal inteiro de um usuário para encontrá-lo.
precisa saber é o seguinte

Eu acho que é um erro usar o arquivo SQLite, que tem mais novas linhas do que as usadas mais recentemente. Costumo criar perfis descartáveis ​​do Firefox apenas para obter alguns cookies de um site que está wgetsofrendo, para que o pote de cookies relevante seja pequeno, mas atualizado mais recentemente. A propósito, por que contar o número de novas linhas no banco de dados, que é binário, em vez de usar o tamanho do arquivo? Você não precisa alterar muito o meu script; apenas troque ls -tcom ls -S. (Ou você pode usar meu script como filtro, canalizando-o, se preferir find).
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.