如何把cookies.txt转换成w3m可用的cookie?

上网、浏览、聊天、下载等
回复
aocif32
帖子: 15
注册时间: 2016-03-12 12:36

如何把cookies.txt转换成w3m可用的cookie?

#1

帖子 aocif32 » 2020-07-03 14:42

因为w3m不支持javascript,导致某个404网站的登陆不成功,要靠其它软件导出的cookies.txt给w3m用,网上找了两个脚本,转换到w3m的cookie文件还是不行。

ns2elcookies.pl

代码: 全选

#!/usr/bin/perl -w

use strict;
use HTTP::Cookies;
use HTTP::Cookies::Netscape;

my ( $cookiefile, $cookies );
if($ARGV[0]) {
	$cookiefile = $ARGV[0];
}
else {
	$cookiefile = `find ~/.mozilla/ -name "cookies.txt" | head -1`;
}
$cookies = HTTP::Cookies::Netscape->new( file=>$cookiefile, autosave=>0 );
$cookies->scan(\&parsecookies);

sub parsecookies {
	my $newsec = 0;
	my ( $ignore1, $key, $val, $path, $domain, $ignore2, $ignore3, $secure, $expires, $ignore4, $ignore5 ) = @_ ;
	if($secure) {
		$newsec = 1;
	}
	print "$key\t$val\t$domain\t$path\t$domain\t$expires\t$newsec\n";
}

ns2elcookies.py

代码: 全选

#!/usr/bin/env python
import sys
from cookielib import *

def main():
	if len(sys.argv) == 1:
		print "Usage:", sys.argv[0], "filename_with_mozilla_cookies"
		return 1
	cookies = MozillaCookieJar()
	cookies.load(sys.argv[1])
	for cookie in cookies:
		cookie.domain = cookie.domain[1:]
		print "%s\t%s\t%s\t%s\t%s\t%d\t%d" % (cookie.name, cookie.value, cookie.domain, cookie.path, cookie.domain, cookie.expires, cookie.secure) 

if __name__ == '__main__':
	main()

# Usage, eg. $ python ns2elcookies.py file_with_mozilla_cookies >> ~/.elinks/cookies
头像
astolia
论坛版主
帖子: 6450
注册时间: 2008-09-18 13:11

Re: 如何把cookies.txt转换成w3m可用的cookie?

#2

帖子 astolia » 2020-07-03 21:13

你这两个脚本是针对elinks的啊,就算文件名里的el不知道是什么意思,python脚本最后一行可是写明白了的

这是w3m保存cookie数据的核心代码

代码: 全选

	fprintf(fp, "%s\t%s\t%s\t%ld\t%s\t%s\t%d\t%d\t%s\t%s\t%s\n",
		parsedURL2Str(&p->url)->ptr,
		p->name->ptr, p->value->ptr, p->expires,
		p->domain->ptr, p->path->ptr, p->flag,
		p->version, str2charp(p->comment),
		(p->portl) ? portlist2str(p->portl)->ptr : "",
		str2charp(p->commentURL));
你开-cookie参数用w3m随便访问一个会设置cookie的网站,打开~/.w3m/cookie和上面的代码对照一下,格式就出来了

代码: 全选

url	名称	值	过期时间	域名	路径	标志	版本	注释	端口	注释url
注释、端口、注释url都可以留空,版本要么0要么1,标志根据它cookie的值来(初始值是1,如果有secure再加2,如果有domain再加4,如果有path再加8)

比如下面这个访问https://www.baidu.com/的
Untitled.png
转成w3m的cookie就是

代码: 全选

https://www.baidu.com/	BIDUPSID	2B28******E28E3	expire换算成UNIX时间	.baidu.com	/	13	0			
....
https://www.baidu.com/	BAIDUID	2B28*******8B347E:FG=1	expire换算成UNIX时间	.baidu.com	/	13	1	bd		
....
https://www.baidu.com/	BD_HOME	1			/	9	0		
回复