python学习,使用requests库来模拟登录github,post请求。
这次我们要模拟登录的页面是

首先我们先尝试着登陆一遍分析一下请求,
打开开发者工具下的network选项,

可以很清楚的看到这个会话session,而且是post请求,这多半是我们刚才登录是所发出去的请求,我们往下拉查看form data

这里要注意,这个authenticity_token的值该怎么获取,我们从网页的源代码中查找这个关键字,

发现这个值就在页面中,而且每次刷新之后这个value总是会不断地变化,好,分析完毕后,我们开始构建代码
import requests
from bs4 import BeautifulSoup
import time
#自己写的,模块化一哈,舒服一哈,2019.5.6 22.22
#模拟登陆练习,登录github
class login(object):
def __init__(self):
self.headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
self.first_url='https://github.com/login'
self.second_url='https://github.com/session'
self.test_url='https://github.com/?tab=stars' #可以设置成你的个人主页url
self.session=requests.Session()
def get_log(self):#这个方法是把token信息解析找到后传递
html=requests.get(url=self.first_url,headers=self.headers)
soup=BeautifulSoup(html.text,'lxml')
tokens=soup.find_all('input',type="hidden")[1]
at=tokens.attrs['value']
return at
def post_log(self,login,password):
#这是要提交的表单
data={
'commit':'Sign in',
'utf8':' ✓',
'authenticity_token':self.get_log(),
'login':login,
'password':password,
'webauthn-support':' supported'
}
res=self.session.post(url=self.second_url,data=data,headers=self.headers)
self.test_func()
def test_func(self): #这个方法用来模拟登陆后请求我们的个人主页,然后把源码保存到文件里,以此来确定是否模拟登录成功。
res2=self.session.get(url=self.test_url,headers=self.headers)
with open('gitstar.html','wb') as f:
f.write(res2.content)
if __name__=='__main__':
jessus=login()
jessus.post_log('你的用户名','你的密码')
运行一下,我们把保存的html文件打开

成功了,确实是我们的github主页!
希望能给你提供思路,主要是requests post 请求,还有维持一个会话session很重要,如果你觉得文章还不错,点个赞吧,谢谢!
python学习,使用requests库来模拟登录github,post请求。的更多相关文章
- python学习(23)requests库爬取猫眼电影排行信息
本文介绍如何结合前面讲解的基本知识,采用requests,正则表达式,cookies结合起来,做一次实战,抓取猫眼电影排名信息. 用requests写一个基本的爬虫 排行信息大致如下图 网址链接为ht ...
- [Python] Python 模拟登录,并请求
Python 模拟登录,并请求 # encoding: utf- import requests import socket import time socket.setdefaulttimeout( ...
- Python学习day45-数据库(总结)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习day42-数据库的基本操作(1)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习day41-数据库(1)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- python下载安装requests库
一.python下载安装requests库 1.到git下载源码zip源码https://github.com/requests/requests 2.解压到python目录下: 3.“win+R”进 ...
- Python学习day44-数据库(单表及多表查询)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习day43-数据库(多表关系)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- 使用requests库提交multipart/form-data 格式的请求
前言: Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库.它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求 ...
随机推荐
- 推理集 —— death
事故: 自杀: 他杀: 1. 跳楼 头向下死得比较快,没那么痛苦. 脚向下,不会立刻死亡,痛苦至极.死亡原因可能不是跳楼,而是失血过多而死 扑下去, 同头向下. 仰着跌下去,同头向下.. 跳楼最好头先 ...
- 关于Java泛型的?和 T 的区别
java中的?号指未知的类型:而T指具体类型 泛型问号(?)未知的类型就是可以指定当前问号(?)所代表的类,可以指定上限(extends)和下限(super) 泛型T指已经具体知道了类型,就是不能指定 ...
- Objective-C 继承与类
创建: 2018/01/20 完成: 2018/01/21 更新: 2018/01/22 标题前增加 [Objective-C] 继承的概念 父类与子类 ●继承: 继承其他类 ●父类: 被继承的类 ...
- bzoj 1783: [Usaco2010 Jan]Taking Turns【贪心+dp】
不知道该叫贪心还是dp 倒着来,记f[0][i],f[1][i]分别为先手和后手从n走到i的最大值.先手显然是取最大的,当后手取到比先手大的时候就交换 #include<iostream> ...
- 搞定springboot项目连接远程服务器上kafka遇到的坑以及完整的例子
版本 springboot 2.1.5.RELEASE kafka 2.2 遇到的坑 用最新的springboot就要用最新的kafka版本! 当我启动云服务器上的zk后,再启动kafka后台日志也没 ...
- MongoDB Built-In Roles(内置角色)
1. 数据库用户角色:read.readWrite; 2. 数据库管理角色:dbAdmin.dbOwner.userAdmin: 3. 集群管理角色:clusterAdmin.clusterManag ...
- 解决前后端分离的“两次请求”引出的Web服务器跨域请求访问问题的解决方案
在前后端分离的项目中,前端和后端可能是在不同的服务器上,也可以是Docker上,那就意味着前端请求后端Restful接口时,存在跨域情况. 后端在做了通用的跨域资源共享CORS设置后,前端在做ajax ...
- Spring 侵入式和非侵入式
1.非侵入式的技术体现 允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须从Spring框架的系统API的某个类来继承或者实现某个接口. 2.如何实现非侵入式 ...
- Quartz.Net学习笔记(2)-简介
一.Quartz.Net是什么 1.来源 Quartz.Net是一个开源的作业调度框架: 2.下载地址 官网地址:http://www.quartz-scheduler.net/documentati ...
- VMware workstation 14 CentOs 7.5.1804 虚拟机网卡设置为NAT模式并设置固定IP
一.背景知识 虚拟机网络模式 无论是vmware workstation,virtual box,virtual pc等虚拟机软件,一般来说,虚拟机有三种网络模式: 1.桥接 2.NAT 3. ...