ฉันจะใช้คุกกี้ Firefox กับ Wget ได้อย่างไร


15

wget --load-cookiesจะโหลดคุกกี้เป็น "ไฟล์ต้นฉบับเดิมในรูปแบบที่ใช้โดยไฟล์ cookies.txt ของ Netscape" อย่างไรก็ตาม Firefox เก็บคุกกี้ไว้ในฐานข้อมูลSQLite

มีวิธีการแยก "ไฟล์ cookies.txt ของ Netscape" จากcookies.sqliteไฟล์Firefox หรือไม่

คำตอบ:


12

มีส่วนขยายผู้ส่งออกคุกกี้ที่คุณสามารถใช้เพื่อส่งออกไฟล์รูปแบบ cookie.txt ที่สามารถใช้กับ wget ได้

หรือคุณสามารถสร้างของคุณเอง Options / Privacy / remove individual cookiesคุกกี้อยู่ในดูได้ คุณสามารถค้นหาคุกกี้ที่คุณติดตามและสร้างไฟล์. 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

1
ดูเหมือนว่าส่วนขยายการส่งออกคุกกี้สำหรับ Firefox จะทำงานได้ดี
mivk

2
น่าเสียดายที่ FF รุ่นใหม่จะทำให้เจ็บปวดมากขึ้นดูเหมือนว่าจะไม่รองรับมัลติโปรเซสเซอร์และเป็นมรดกดังนั้นจะหยุดทำงานใน FF 57+
บางคนบางที่สนับสนุนโมนิก้า

9

หากคุณกำลังใช้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

1
วิธีนี้ใช้ไม่ได้กับคุกกี้ที่เก็บไว้เฉพาะในช่วงเบราว์เซอร์ที่กำหนด (ดังนั้นโปรดตรวจสอบคุกกี้เซสชันทั้งหมด)
Krzysztof Krasoń

ผมเคยห่อขึ้นนี้ในคำสั่งที่เรียกว่าcurlfire curlfire http://www.example.com/และculfire -P newprofile http://www.example.com
Att Righ

1
มันเยี่ยมมาก ไม่ยุ่งเกี่ยวกับมัลติโพรเซสหรือ FF เวอร์ชันที่ใหม่กว่าและสามารถเขียนสคริปต์ได้
ใครบางคนที่ไหนสักแห่งจัดหาโมนิก้า

1

วิธีที่คุณค้นหาไฟล์ sqlite ไม่สามารถใช้งานได้กับระบบส่วนใหญ่

อีกอย่างถ้าคุณมีไฟล์ sqlite หลายไฟล์เพราะคุณมีโปรไฟล์ Firefox หลายไฟล์

ดังนั้นนี่คือวิธีที่ฉันทำ:

รับไฟล์ cookies.sqlite ทั้งหมดจัดเรียงตามหมายเลขบรรทัดและถือว่าไฟล์ที่มีบรรทัดมากที่สุดคือไฟล์ที่คุณใช้งานบ่อยที่สุด จากนั้นคืนค่าพา ธ สำหรับไฟล์นั้น

ดังนั้นฉันจึงเปลี่ยนสายของคุณเป็น:

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

น่าสนใจ ดังนั้นคุณใช้ Firefox รุ่นไหนที่สคริปต์ของฉันไม่พบโปรไฟล์ทั้งหมดตามค่าเริ่มต้น คุกกี้จะถูกเก็บไว้ที่ไหน? แน่นอนคุณไม่จำเป็นต้องค้นหาไดเรกทอรีหลักทั้งหมดของผู้ใช้เพื่อค้นหา
hackerb9

ฉันคิดว่ามันเป็นความผิดพลาดในการเริ่มต้นการใช้ไฟล์ SQLite ซึ่งมีการขึ้นบรรทัดใหม่มากกว่าที่ใช้ล่าสุด ฉันมักจะสร้างโพรไฟล์ Firefox ที่ถูกทิ้งไว้เพื่อรับคุกกี้จากเว็บไซต์ที่กำลังwgetเศร้าโศกดังนั้นโถคุกกี้ที่เกี่ยวข้องจะมีขนาดเล็ก แต่อัปเดตล่าสุด โดยวิธีการทำไมนับจำนวนบรรทัดใหม่ในฐานข้อมูลซึ่งเป็นไบนารีแทนที่จะใช้ขนาดไฟล์? คุณไม่จำเป็นต้องเปลี่ยนสคริปต์มากนัก เพียงแค่แลกเปลี่ยนกับls -t ls -S(หรือคุณสามารถใช้สคริปต์ของฉันเป็นตัวกรองโดยวางลงในสคริปต์หากคุณต้องการfind)
hackerb9
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.