Wget ile Firefox çerezlerini nasıl kullanabilirim?


15

wget --load-cookiesçerezleri "Netscape'in cookies.txt dosyası tarafından orijinal olarak kullanılan formatta metin dosyası" olarak yükler. Ancak, Firefox çerezlerini bir SQLite veritabanında tutar .

Firefox cookies.sqlitedosyasından "Netscape's cookies.txt dosyasını" ayıklamanın bir yolu var mı ?

Yanıtlar:


12

Wget ile kullanılabilecek bir cookie.txt biçimindeki dosyayı dışa aktarmak için kullanabileceğiniz çerez dışa aktarma uzantıları vardır.

Alternatif olarak kendinizinkini oluşturabilirsiniz. Çerezler içinde görüntülenebilir Options / Privacy / remove individual cookies. Daha sonra bulunduğunuz çerezi bulabilir ve bilgileri içeren bir .txt dosyası oluşturabilirsiniz:

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.

Yani biri şöyle görünebilir:

.domain.com TRUE  / FALSE 4102358400 SESSIONID dfjdfkjsjwere090fusfdkljf

1
İhracat Çerezler Firefox için uzatma çalışmaları cezası gibi görünüyor.
mivk

2
Ne yazık ki, yeni FF sürümleri bunu daha fazla acı çekecek - çok işlemeyi desteklemiyor gibi görünüyor ve eski olduğu için FF 57 + 'da çalışmayı bırakacak.
17:52


9

Kullanıyorsanız wget, muhtemelen komut satırından rahat olursunuz. Bu durumda, bir Firefox uzantısı yerine basit bir kabuk komut dosyası kullanabilirsiniz:

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

Sen edebilirsiniz extract_cookies.sh script indir gelen https://gist.github.com/hackerb9/d382e09683a52dcac492ebcdaf1b79af veya kesim ve aşağıdakileri yapıştırın:

#!/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
Bu yalnızca belirli tarayıcı oturumu sırasında tutulan çerezler için çalışmaz. (tüm oturum çerezleri çok probalby)
Krzysztof Krasoń

Bunu curlfire adlı bir komuta tamamladım . curlfire http://www.example.com/veculfire -P newprofile http://www.example.com
Att Righ

1
Bu harika. Çok işlemcili veya daha yeni FF sürümlerine müdahale etmez ve komut dosyası yazılabilir.
17:53

1

Sqlite dosyasını bulma yöntemi çoğu sistemde çalışmaz.

Ayrıca, birden fazla Firefox profiliniz olduğu için birden fazla sqlite dosyanız varsa.

İşte nasıl yaparım:

Tüm cookies.sqlite dosyalarını alın, satır numarasına göre sıralayın ve en fazla satırın en çok kullandığınız dosya olduğunu varsayalım. Sonra bu dosyanın yolunu döndürün.

Bu yüzden hattınızı şu şekilde değiştirdim:

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

İlginç. Peki betiğimin varsayılan olarak tüm profilleri bulamaması için hangi Firefox sürümünü kullanıyorsunuz? Çerezler nerede saklanıyor? Şüphesiz, bir kullanıcıyı bulmak için kullanıcının tüm giriş dizininde arama yapmanız gerekmez.
hackerb9

Ben en son kullanılan yerine en yeni satırları olan SQLite dosyasını kullanarak varsayılan bir hata olduğunu düşünüyorum. Sık sık wgetkeder veren bir siteden bazı çerezler almak için sık sık Firefox profilleri oluşturacağım , böylece ilgili çerez kavanozu küçük olacak, ancak en son güncellenecek. Bu arada, neden dosya boyutunu kullanmak yerine veritabanındaki ikili satır sayısını saymalısınız? Bunu yapmak için betiğimi çok fazla değiştirmeniz gerekmez; Sadece takas ls -tile ls -S. (Ya da isterseniz betiğimi bir boru olarak filtreleyerek kullanabilirsiniz find).
hackerb9
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.