Come uso i cookie di Firefox con Wget?


15

wget --load-cookiescaricherà i cookie come "file testuale nel formato originariamente utilizzato dal file cookies.txt di Netscape". Tuttavia, Firefox conserva i suoi cookie in un database SQLite .

C'è un modo per estrarre il "file cookies.txt di Netscape" dal cookies.sqlitefile Firefox ?

Risposte:


12

Esistono estensioni per esportatori di cookie che puoi utilizzare per esportare un file in formato cookie.txt che può essere utilizzato con wget.

In alternativa, puoi crearne uno tuo. I cookie sono visualizzabili in Options / Privacy / remove individual cookies. Puoi trovare il cookie che stai cercando e creare un file .txt contenente le informazioni:

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.

Quindi uno potrebbe apparire così per esempio:

.domain.com TRUE  / FALSE 4102358400 SESSIONID dfjdfkjsjwere090fusfdkljf

1
L' estensione Export Cookies per Firefox sembra funzionare correttamente.
mivk

2
Sfortunatamente, le versioni più recenti di FF renderanno questo più un problema: non sembra supportare il multiprocesso, ed è un'eredità quindi smetterà di funzionare in FF 57+.
SomeoneSomewhereSupportsMonica

8

Se stai usando wget, probabilmente ti trovi a tuo agio dalla riga di comando. In tal caso, anziché un'estensione di Firefox, è possibile utilizzare un semplice script di shell:

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

Puoi scaricare lo script extract_cookies.sh da https://gist.github.com/hackerb9/d382e09683a52dcac492ebcdaf1b79af o tagliare e incollare quanto segue:

#!/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
Questo non funziona per i cookie che vengono conservati solo durante una determinata sessione del browser. (quindi, tutti i cookie di sessione)
Krzysztof Krasoń

L'ho concluso in un comando chiamato curlfire . curlfire http://www.example.com/eculfire -P newprofile http://www.example.com
Att Righ

1
Questo è fantastico Non interferisce con multiprocesso o versioni più recenti di FF e può essere copiato.
SomeoneSomewhereSupportsMonica

1

Il modo in cui trovi il file sqlite non funziona sulla maggior parte dei sistemi.

Inoltre, se hai più file sqlite perché hai più profili Firefox.

Quindi ecco come lo faccio:

Ottieni tutti i file cookies.sqlite, ordinali per numero di riga e supponi che quello con il maggior numero di righe sia quello che stai utilizzando di più. Quindi restituire il percorso per quel file.

Quindi ho cambiato la tua linea in questo:

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

Interessante. Quindi quale versione di Firefox stai utilizzando per cui il mio script non trova tutti i profili per impostazione predefinita? Dove vengono memorizzati i cookie? Sicuramente, non è necessario cercare l'intera home directory di un utente per trovarli.
hackerb9,

Penso che sia un errore predefinito usare il file SQLite che ha il maggior numero di righe anziché quello usato più di recente. Creerò spesso profili di Firefox usa e getta solo per ottenere alcuni cookie da un sito che sta causando wgetdolore, quindi il barattolo dei cookie pertinente sarà piccolo, ma aggiornato più di recente. A proposito, perché contare il numero di newline nel database, che è binario, invece di usare la dimensione del file? Non è necessario cambiare molto la mia sceneggiatura per farlo; basta scambiare ls -tcon ls -S. (Oppure puoi usare il mio script come filtro eseguendo il piping in esso, se preferisci find).
hackerb9,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.