Làm cách nào để sử dụng cookie Firefox với Wget?


15

wget --load-cookiessẽ tải cookie dưới dạng "tệp văn bản theo định dạng ban đầu được sử dụng bởi tệp cookies.txt của Netscape". Tuy nhiên, Firefox giữ cookie của nó trong cơ sở dữ liệu SQLite .

Có cách nào để trích xuất "tệp cookies.txt của Netscape" từ cookies.sqlitetệp Firefox không?

Câu trả lời:


12

Có các tiện ích xuất khẩu cookie mà bạn có thể sử dụng để xuất tệp định dạng cookie.txt có thể được sử dụng với wget.

Ngoài ra, bạn có thể tạo của riêng bạn. Cookies có thể xem được Options / Privacy / remove individual cookies. Bạn có thể tìm thấy cookie bạn đang theo dõi và tạo tệp .txt chứa thông tin:

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.

Vì vậy, một người có thể trông như thế này chẳng hạn:

.domain.com TRUE  / FALSE 4102358400 SESSIONID dfjdfkjsjwere090fusfdkljf

1
Các khẩu Cookies phần mở rộng cho Firefox dường như làm việc tốt.
mivk 28/03/2016

2
Thật không may, các phiên bản FF mới hơn sẽ khiến điều này trở nên khó khăn hơn - dường như nó không hỗ trợ đa xử lý và là di sản nên sẽ ngừng hoạt động trong FF 57+.
Ai đóSomewhereSupportsMonica

8

Nếu bạn đang sử dụng wget, có lẽ bạn cảm thấy thoải mái từ dòng lệnh. Trong trường hợp đó, thay vì tiện ích mở rộng của Firefox, bạn có thể sử dụng tập lệnh shell đơn giản:

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

Bạn có thể tải xuống tập lệnh extract_cookies.sh từ https://gist.github.com/hackerb9/d382e09683a52dcac492ebcdaf1b79af hoặc cắt và dán như sau:

#!/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
Điều này không hoạt động đối với các cookie chỉ được giữ trong phiên trình duyệt nhất định. (vì vậy probalby tất cả các cookie phiên)
Krzysztof Krasnoyń

Tôi đã gói nó trong một lệnh gọi là curlfire . curlfire http://www.example.com/culfire -P newprofile http://www.example.com
Att Righ

1
Điều đó thật tuyệt. Không can thiệp vào đa phiên bản hoặc các phiên bản FF mới hơn và có thể được viết kịch bản.
Ai đóSomewhereSupportsMonica

1

Cách bạn tìm thấy tệp sqlite không hoạt động trên hầu hết các hệ thống.

Ngoài ra nếu bạn có nhiều tệp sqlite vì bạn có nhiều hồ sơ Firefox.

Vì vậy, đây là cách tôi làm điều đó:

Nhận tất cả các tệp cookies.sqlite, sắp xếp chúng theo số dòng và giả sử tệp có nhiều dòng nhất là tệp bạn thực sự sử dụng nhiều nhất. Sau đó trả lại đường dẫn cho tập tin đó.

Vì vậy, tôi đã thay đổi dòng của bạn để này:

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

Hấp dẫn. Vì vậy, phiên bản Firefox nào bạn đang sử dụng mà tập lệnh của tôi không tìm thấy tất cả các cấu hình theo mặc định? Cookie đang được lưu trữ ở đâu? Chắc chắn, bạn không phải tìm kiếm toàn bộ thư mục nhà của người dùng để tìm thấy chúng.
hackerb9

Tôi nghĩ rằng đó là một sai lầm khi mặc định sử dụng tệp SQLite có nhiều dòng mới nhất thay vì được sử dụng gần đây nhất. Tôi sẽ thường tạo các hồ sơ Firefox vứt đi chỉ để nhận một số cookie từ một trang web gây wgetđau buồn, vì vậy, lọ cookie có liên quan sẽ rất nhỏ, nhưng được cập nhật gần đây nhất. Nhân tiện, tại sao lại đếm số lượng dòng mới trong cơ sở dữ liệu, là nhị phân, thay vì sử dụng kích thước tệp? Bạn không cần phải thay đổi kịch bản của tôi nhiều để làm như vậy; Chỉ cần trao đổi ls -tvới ls -S. (Hoặc bạn có thể sử dụng tập lệnh của tôi làm bộ lọc bằng cách chuyển vào tập lệnh nếu bạn muốn find).
hackerb9
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.