wget --load-cookies
Cookieを「Netscapeのcookies.txtファイルが元々使用していた形式のテキストファイル」としてロードします。ただし、FirefoxはCookieをSQLiteデータベースに保持します。
Firefox cookies.sqlite
ファイルから「Netscapeのcookies.txtファイル」を抽出する方法はありますか?
wget --load-cookies
Cookieを「Netscapeのcookies.txtファイルが元々使用していた形式のテキストファイル」としてロードします。ただし、FirefoxはCookieをSQLiteデータベースに保持します。
Firefox cookies.sqlite
ファイルから「Netscapeのcookies.txtファイル」を抽出する方法はありますか?
回答:
wgetで使用できるcookie.txt形式のファイルをエクスポートするために使用できるCookieエクスポーター拡張機能があります。
または、独自に作成することもできます。Cookieはで表示できOptions / Privacy / remove individual cookies
ます。後のCookieを見つけて、情報を含む.txtファイルを作成できます。
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.
たとえば、次のようになります。
.domain.com TRUE / FALSE 4102358400 SESSIONID dfjdfkjsjwere090fusfdkljf
を使用wget
している場合は、おそらくコマンドラインから快適です。その場合、Firefox拡張機能の代わりに、単純なシェルスクリプトを使用できます。
extract_cookies.sh > mycookies.txt
wget --load-cookies mycookies.txt examplehost.com
あなたはできるextract_cookies.shスクリプトをダウンロードからhttps://gist.github.com/hackerb9/d382e09683a52dcac492ebcdaf1b79afまたはカットして、次のように貼り付けます。
#!/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
sqliteファイルを見つける方法は、ほとんどのシステムでは機能しません。
また、複数のFirefoxプロファイルがあるために複数のsqliteファイルがある場合はどうなりますか。
だからここに私がそれをする方法があります:
すべてのcookies.sqliteファイルを取得し、行番号でソートし、最も多くの行を持つファイルが実際に最も使用しているファイルであると想定します。次に、そのファイルのパスを返します。
だから私はあなたの行をこれに変更しました:
SQLFILE=$(find ~ -type f -name cookies.sqlite -exec wc -l {} \+ | sort -rn |grep -v total| head -1 |egrep -o "/.*")
wget
悲しみを与えているサイトからいくつかのCookieを取得するためだけに、使い捨てのFirefoxプロファイルを作成することがよくあるため、関連するCookie jarは小さくなりますが、最新のものに更新されます。ところで、ファイルサイズを使用するのではなく、データベース内の改行の数をカウントするのはなぜですか?そのために私のスクリプトをあまり変更する必要はありません。と交換ls -t
してくださいls -S
。(または、必要に応じて、スクリプトをパイプとして使用してフィルターとして使用できますfind
)。