Bagaimana cara menggunakan cookie Firefox dengan Wget?

15

wget --load-cookiesakan memuat cookie sebagai "file teks dalam format yang awalnya digunakan oleh file cookies.txt Netscape". Namun, Firefox menyimpan cookie di dalam basis data SQLite .

Apakah ada cara untuk mengekstrak "file cookies.txt Netscape" dari cookies.sqlitefile Firefox ?

sds
sumber

Jawaban:

12

Ada ekstensi eksportir cookie yang dapat Anda gunakan untuk mengekspor file format cookie.txt yang dapat digunakan dengan wget.

Atau, Anda dapat membuatnya sendiri. Cookie dapat dilihat di Options / Privacy / remove individual cookies. Anda dapat menemukan cookie yang Anda cari dan membuat file .txt yang berisi informasi:

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.

Jadi orang mungkin terlihat seperti ini misalnya:

.domain.com TRUE  / FALSE 4102358400 SESSIONID dfjdfkjsjwere090fusfdkljf
Paul
sumber
1
The Ekspor Cookies ekstensi untuk Firefox tampaknya bekerja dengan baik.
mivk
2
Sayangnya, versi FF yang lebih baru akan membuat ini lebih menyusahkan - sepertinya tidak mendukung multiproses, dan merupakan warisan sehingga akan berhenti bekerja di FF 57+.
SeseorangDukungan TempatMonika
8

Jika Anda menggunakan wget, Anda mungkin merasa nyaman dari baris perintah. Dalam hal ini, alih-alih ekstensi Firefox, Anda dapat menggunakan skrip shell sederhana:

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

Anda dapat mengunduh skrip extract_cookies.sh dari https://gist.github.com/hackerb9/d382e09683a52dcac492ebcdaf1b79af atau memotong dan menempelkan yang berikut:

#!/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
hackerb9
sumber
1
Ini tidak berfungsi untuk cookie yang disimpan hanya selama sesi browser yang diberikan. (jadi persiapkan semua cookie sesi)
Krzysztof Krasoล„
Saya telah membungkus ini dalam perintah yang disebut curlfire . curlfire http://www.example.com/danculfire -P newprofile http://www.example.com
Att Righ
1
Ini bagus. Tidak mengganggu multiproses atau versi FF yang lebih baru, dan dapat dibuat skrip.
SeseorangDukungan TempatMonika
1

Cara Anda menemukan file sqlite tidak berfungsi di sebagian besar sistem.

Juga bagaimana jika Anda memiliki banyak file sqlite karena Anda memiliki beberapa profil Firefox.

Jadi, inilah cara saya melakukannya:

Dapatkan semua file cookies.sqlite, urutkan berdasarkan nomor baris dan anggap yang paling banyak baris adalah yang paling sering Anda gunakan. Kemudian kembalikan jalur untuk file itu.

Jadi saya mengubah baris Anda menjadi ini:

SQLFILE=$(find ~ -type f -name cookies.sqlite -exec wc -l {} \+ | sort -rn |grep -v total| head -1 |egrep -o "/.*")
Brad Allison
sumber
Menarik. Jadi, versi Firefox apa yang Anda gunakan sehingga skrip saya tidak menemukan semua profil secara default? Di mana cookie disimpan? Tentunya, Anda tidak perlu mencari seluruh direktori home pengguna untuk menemukannya.
hackerb9
Saya pikir itu adalah kesalahan default untuk menggunakan file SQLite yang memiliki baris paling baru daripada yang paling baru digunakan. Saya akan sering membuat profil Firefox yang dibuang hanya untuk mendapatkan beberapa cookie dari situs yang memberikan wgetkesedihan, sehingga toples cookie yang relevan akan kecil, tetapi yang terbaru diperbarui. Ngomong-ngomong, mengapa menghitung jumlah baris baru dalam database, yang merupakan biner, daripada menggunakan filesize? Anda tidak perlu banyak mengubah skrip saya untuk melakukannya; hanya bertukar ls -tdengan ls -S. (Atau Anda dapat menggunakan skrip saya sebagai filter dengan menyaringnya jika Anda mau find).
hackerb9