前言:有些时候我们需要下载一些文件或者是其他url操作,可以使用curl或者wget进行自动化的处理,但部分网站存在网站验证或者其他方式登录,这对需要自动化处理的我们带来了一些不便,这里记录一下关于这个的处理方式

工具:wget(windows或者linux都行)

步骤:

方法一(适用于网站使用简单的http用户名密码/基本用户验证):

wget --user=用户名 --password=密码 "链接地址"

方法二(适用于没有用户登录js验证的网站/没有机器人检测的网站):

需要两步操作,先登录再下载

先登录获取用户cookie

wget --post-data="username=xxx&password=xxx" --save-cookies=cookie --keep-session-cookies "登录地址"

下载对应文件
wget --load-cookies=cookie --keep-session-cookies "下载地址"

方法三(适用于有登录验证或者机器人验证的网站,不适用于每次都全自动变换验证信息的网站):

本方法比较麻烦,需要对http协议有一定认识才比较容易理解(不能理解也可以学着用,不一定要理解)

原理:网站在非Web Socket模式(常规请求-回复模式)下,用户需要请求服务器,服务器根据请求回应相应的信息,在请求结束后一段时间内,TCP链接可根据网络状态复用TCP套接字,但即使是复用的TCP链接发出的请求依旧不能用于身份识别,更别说在一小段时间后TCP链接完全关闭后重新发起的连接更加不可以用于身份识别(这里只提常规的用户验证不提IP验证哈~一般情况下网站不会使用IP验证,这个原因结尾说)

网站服务器识别用户的方式不能从TCP连接上下手,就只能从与用户交换信息的地方下手了!

用户第一次请求服务器的时候,服务器一般会分配一个session(会话令牌),用于区分用户是独立的一个新的用户(不属于其他用户的请求),当用户登录后,相关session被附加登录令牌的信息(可在服务端附加,也可在客户端附加,也有两者均有的附加方式)

所以只要用户登录完成后,用户验证信息令牌拿到手就可以实现自动化的请求了!(这里也有前提条件:不能有大的环境改变,不能出现浏览器不一致的情况等等)

但是!!!这里也有一个问题,一般来说用于自动化请求的计算机大多数都是服务器,你用来登录的电脑一般都是带桌面的,服务器电脑一般不带桌面!所以可以这样解决!

在你的服务器上开一个daili服务器,然后电脑连上服务器后访问网页登录并获取cookie数据,然后关闭代理,将cookie和useragent信息填入wget来使用自动化请求

1.daili电脑(具体怎么操作请搜索一下,用s s h 也是可以的!)

2.访问需要登录的网站(推荐chrome等浏览器)

3.使用chrome浏览器就可以直接使用开发者工具F12直接点击Network->找到第一个网页请求(我这里是www.baidu.com)->点击左键打开详情->向下查找到Request Header->Cookie(温馨提示:使用方法二需要打开一次后再刷新一下才能获取到正确的信息)

开发者工具

4.使用类似于wget方法二里面的操作(不要登录,你已经登录了不是么?),将cookie储存在文件cookie(没后缀名,跟命令里面的cookie对应)

创建文件cookie并添加如下内容,根据你访问的网站修改下面中文的部分

# HTTP cookie file.
# Generated by Wget on 2021-09-06 13:56:09.
# Edit at your own risk.

域名 FALSE /路径 TRUE 0 名字 值
域名 FALSE /路径 FALSE 0 名字  值 

保存文件后,修改命令,添加浏览器的相关属性信息(这个信息在F12的cookie信息下面一点点的地方),使用命令访问需要验证的地址

 wget --user-agent="你电脑的User-Agent" --load-cookies=cookie --keep-session-cookies "下载地址" 

其他信息:

问:为什么现在很少有IP验证的地方(或者说为什么大多数都是用户验证?)

答:因为现在很多地方的用户使用的是同一个ip地址访问(nat网络),这种网络环境常见于很多运营商,毕竟一个独立IP对应N个用户可以很省钱!单问题也有!如果一个用户是恶意用户,会导致那一群用户受到波及,同理一群用户里面只要有一个授权用户(登录的用户),其他用户不需要授权就能访问是不是感觉非常不安全?!所以现在很少有IP验证的地方了(网吧和教育网算是特例,里面有很多都是根据IP来授权的,例如网吧特权!)

最后修改日期:2021年9月8日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。