项目:API模拟登录Github

撰写于2020-12-5

模拟登录的两种方式

  • 利用Selenium模拟人类登录

  • 直接向登录的API发送登陆参数(本次使用方法

首先打开GitHub登录页面,点击此链接即可
GitHub登录页面

登录界面及源码

标注1 是防止跨域攻击的(CSRF)的token,在这里名字叫authenticity_token,这是我们需要提交的数据1,一般网站都会有,找他的诀窍就是通过提交按钮2找他的父类标签form表单里的所有input如下

在这里插入图片描述

然后查找输入账户密码,F12先清空再进行监听首先会得到一个session

在这里插入图片描述

在session最下面找到form data,这些数据是我们要传给服务器的,并不是所有的都要传递,具体传递哪些还是要自己组合测试,被ban了就说明缺少关键参数,这里我们也能看见token和上文是一致的

Form Data

关键参数如下:

suthenticity_token
login_in
password

然后继续在session里找最上面的General

General


这里的Request URL就是我们需要Form Data的表单数据发送到这里

Request URL: https://github.com/session

在session文件Response Headers中设置了Cookies需要我们返回

在这里插入图片描述


在Request Headers中也携带了Cookies

在这里插入图片描述


打开Settings的Profile,同样用F12查看

# General
Request URL: https://github.com/settings/profile

# Response Header
保存Set-Cookie*n个
#Request Headers
发送Cookie*1个

代码

import requests
from lxml import etree

url = 'https://github.com/login'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
response = requests.get(url=url, headers=headers)
content = response.text
html = etree.HTML(content)
token = html.xpath('//input[@name="authenticity_token"]/@value')[0]
cookies = response.cookies
print("登录页面token已获取{}".format(token))
print("登录页面cookies已获取".format(response.cookies))

print("-"*10)


url = "https://github.com/session"
data = {
    'commit': 'Sign in',
    'authenticity_token': token,
    'login': 'chyaoyuan',
    'password': 'lsxy13145678',
}
response = requests.post(url=url, headers=headers, data=data, cookies=cookies)
cookies = requests.cookies
print("个人首页cookies已获取".format(response.cookies))
print("http状态码为{}".format(response.status_code))

print("-"*10)



url = 'https://github.com/settings/profile'
response = requests.get(url=url, headers=headers)
print("http状态码为{}".format(response.status_code))
print(content)

相关文章

developer-roadmap —— 提供最全的开发者技术路线指南。前端...
一个极简的文件分享工具,无需注册且没有广告即可生成共享下...
收集 Github、Gitee优秀的开源项目,并进行归类整理。项目地...
大家好,我是 Java陈序员,我们有时会搭建一个属于自己的网站...
一个提供交互式的Web UI用于生成兼容MyBatisPlus框架的相关功...
大家好,我是 Java 陈序员。权限认证是我们日常开发绕不过的...