首页 > 其他分享 >04-xx军事自动登录

04-xx军事自动登录

时间:2024-02-11 09:55:23浏览次数:26  
标签:凭证 04 登录 xx Cookie 提交 次访问 请求

本节目标:实现xx军事网账号的自动登录

1.前置知识点

在开始实现之前,需要先学一些必备的前置知识。

1.1 页面刷新抓包

在抓包时,如果有页面刷新,之前的请求包就会被清除(无法分析)。

image-20231202114439658

1.2 表单请求和ajax请求

当看到页面上有一个表单时,当输入账号+点击登录/注册提交,数据提交就两种方式:

  • 表单提交,特征:提交数据页面刷新
  • ajax提交,特征:提交页面不刷新,“偷偷”提交。

1.2.1 表单提交

<form action="https://www.xxxx.com/login" method='post'>
    <input type='text' name='user' />
    <input type='password' name='pwd' />
    <input type="submit" value="登录" />
</form>

例如:https://github.com/login

image-20231202120035257

image-20231202120200575

这种请求想要抓包的话,配合上一步【页面刷新抓包】,可以保留提交前后的请求包。

1.2.3 Ajax提交

下面是基于jQuery实现的发送Ajax请求示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <input type='text' name='user' id="user"/>
    <input type='password' name='pwd' id="pwd"/>
    <input type="button" value="登录" onclick="doLogin()"/>
</div>

<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
    function doLogin() {
        $.ajax({
            url: "提交地址",
            type: "POST",
            data: {
                username: $("#user").val(),
                password: $("#pwd").val(),
            },
            success: function (res) {
                if (res.status) {
                    // 编写登录成功的代码
                    // 主动让页面刷新
                } else {
                    // 编写登录失败的代码
                }
            }
        })
    }
</script>
</body>
</html>

Ajax请求的底层是基于XMLHttpRequest对象实现,所以在抓包时发现两个特征:页面不刷新 + 请求类型是xhr 。

例如:北京大学BBS论坛 https://bbs.pku.edu.cn/v2/home.php

image-20231202121539774想了解更多Ajax可以参见:https://www.cnblogs.com/wupeiqi/articles/5703697.html

1.3 常见登录流程

常见的登录流程一般有两种,情况不同,在基于爬虫实现自动登录时,也需要做不同的调整。

1.3.1 方式1

正常请求流程:

  • 第1次访问,后台会返回内容+Cookie,在cookie中保存当前用户凭证(此时凭证没啥用)
  • 第2次访问,输入用户名+密码提交,此时浏览器会自动将第1次返回的凭证携带到后台; 后台校验成功,此时给凭证赋予登录权限(还是原来的凭证,只不过此时的凭证是用户已登录的标识了)。
  • 第n次访问,携带Cookie中的凭证去访问,后台就会根据凭证(用户标识)返回词用户的相关信息。

如果我们基于爬虫去模拟请求实现时:

  • 第1次访问,读取返回Cookie并保存
  • 第2次访问,携带用户名+密码+上次的Cookie进行登录
  • 第n次访问,携带Cookie去访问,获取当前用户信息。

1.3.2 方式2

正常请求流程:

  • 第1次访问,后台仅返回页面。
  • 第2次访问,输入用户名+密码提交,后台校验成功后,在 响应体Cookie 返回 用户登录凭证。【网页一般在Cookie中居多】
  • 第n次访问,携带之前返回的凭证去访问,后台就会根据凭证(用户标识)返回词用户的相关信息。

如果我们基于爬虫去模拟请求实现时:

  • 第2次访问,携带用户名+密码去登录,在 响应体 或 Cookie中读取用户凭证。【网页一般在Cookie中居多】
  • 第n次访问,携带凭证去访问,获取当前用户信息。

2.案例:xx军事网

https://www.china.com/

请求抓包分析:应该是属于第二种。

  • 第1个请求,cookie不像凭证
  • 登录请求,返回好多cookie
  • 其他请求,携带登录请求的cookie即可
import requests
from bs4 import BeautifulSoup

res = requests.post(
    url="https://passport.china.com/logon",
    data={
        "userName": "自己手机号",
        "password": "qwe123456"
    },
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
        "Referer": "https://passport.china.com/logon",
        "Origin": "https://passport.china.com",
        "X-Requested-With": "XMLHttpRequest"
    }
)
cookie_dict = res.cookies.get_dict()

res = requests.get(
    url="https://passport.china.com/main",
    cookies=cookie_dict
)

soup = BeautifulSoup(res.text, features="html.parser")
tag = soup.find(attrs={"id": "usernick"})
print(tag.text)
print(tag.attrs['title'])

标签:凭证,04,登录,xx,Cookie,提交,次访问,请求
From: https://www.cnblogs.com/fuminer/p/18013181

相关文章

  • 04. GitHub的使用
    一、创建远程库  创建好远程库后,我们可以查看远程库地址链接。二、创建远程库别名gitremoteadd别名远程库地址链接三、查看远程库别名gitremote-v四、推送本地分支到远程库gitpush远程库地址别名或远程库地址链接分支名  我们在第一次使用gitpush......
  • 单机版 Xxl-Job 分布式定时任务调度的部署和使用
    Xxl-Job是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。本篇博客主要介绍如何进行单机版部署和使用,并在博客最后提供源代码下载。Gitee地址:https://gitee.com/xuxueli0323/xxl-jobGitHub地......
  • Atcoder Grand Contest 041 F - Histogram Rooks
    考虑容斥。我们钦定一些格子组成的集合不能被覆盖,设为\(A\)。把与\(A\)中的点同行同列的点抠掉,剩余的点则是可放可不放的,总方案数就是\(2^{\text{剩余点的个数}}\),乘以\((-1)^{|A|}\)并求和即可。这个做法直接优化显然不行。我们考虑设\(A\)中的点所在的列组成的不可重集......
  • python3.9+django4.1+vue3 ,后端项目运行时,报错了,WSGI application 'XXX.wsgi.applicat
    python3.9+django4.1+vue3,后端项目运行时,报错了; 报错信息,如下:django.core.exceptions.ImproperlyConfigured:WSGIapplication'StudentMgrBE.wsgi.application'couldnotbeloaded;Errorimportingmodule.     ------------------------------百度......
  • python django4.1 pycharm,报错,Conflicting 'xxx' models in application 'xxx': <
    遇到了一个报错,不知道咋么解决,pythondjango3pycharm,报错。不晓得怎么解决;Conflicting'xxx'modelsinapplication'xxx':<class'xxx'>and<class'xxx'>.这个是 报错误 信息,如下:RuntimeError:Conflicting'faculty'modelsin......
  • 代码随想录算法训练营第十六天| 104.二叉树的最大深度 559.n叉树的最大深度 111.二
    104.二叉树的最大深度  题目链接:104.二叉树的最大深度-力扣(LeetCode)n叉树也一样思路:我的普通递归方法classSolution{public:intdepth(TreeNode*node,intd){intl=0,r=0;if(node->left==NULL&&node->right==NULL)returnd;if(node-......
  • ABC 304
    T4在一个平面上有一块面积无限的蛋糕,给出\(n\)颗草莓的所在位置和\(a\,(b)\)条平行与\(x\,(y)\)轴的切刀位置。切刀会把蛋糕沿\(x\,(y)\)轴切开。因此一共会切出\((a+1)(b+1)\)块蛋糕。问:现在蛋糕上草莓数量最少的一块蛋糕,草莓数量是多少?最多的,又是多少?用lower_bo......
  • dl-cdr-fai-pt-merge-04
    面向程序员的FastAI和PyTorch深度学习(五)原文:DeepLearningforCodersWithFastaiandPytorch译者:飞龙协议:CCBY-NC-SA4.0第七章:训练一个最先进的模型本章介绍了更高级的技术,用于训练图像分类模型并获得最先进的结果。如果您想了解更多关于深度学习的其他应用,并稍后......
  • [AGC041F] Histogram Rooks 题解
    题目链接点击打开链接题目解法好牛(难)的题!!!所有都被覆盖不难想到容斥暴力的容斥是钦定集合\(S\)中的位置都没被覆盖,然后把不能填棋子的点都去掉,假设剩下的不受限制的点的个数为\(c\),则答案为\(\sum2^c(-1)^{|S|}\)这个暴力是很难直接优化的如果一列被有点被钦定了,那么......
  • eslint报错:Parsing error: No Babel config file detected for E:\xxx\index.config
    eslint根据eslint配置文件的parserOption,知道了要使用babel对代码进行解析,但是解析babel需要使用babel配置文件,由于找不到配置文件(babel配置文件默认需要放在根目录下),所以会报错。因此,添加requireConfigFile:false,本质上是告诉eslint,不用查找这个配置文件了,虽然表面上可以解决这......