Python requests HTTP验证登录实现流程


Posted in Python onNovember 05, 2020

1、场景

1)用户输入完网址后,浏览器直接弹出需要输入用户名/密码

Python requests HTTP验证登录实现流程

PS:此时输入用户名密码即可登录,或者直接带着用户名密码访问网站。

假设url为http://xxx.yyy.zzz

用户名为admin

密码为123456

则访问的网址应该为http://admin:123456@xxx.yyy.zzz【http://username:password@url】

直接访问改网址即可

2)利用requests.get(url)返回状态码为401

# -*- encoding=utf-8 -*-
import requests
if __name__ == '__main__':
  url = 'http://xxxxx.yyyyyy'
  response = requests.get(url=url)
  status_code = response.status_code
  print status_code
  text = response.text
  print text

运行

401
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
 <h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>
 <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>
 </fieldset></div>
</div>
</body>
</html>

2、HTTP基础验证

这是一种简单的身份认证,它是通过http的authorization请求头中,携带经过base64加密的用户名和密码而实现的一种认证

# -*- encoding=utf-8 -*-
import requests
from requests.auth import HTTPBasicAuth
if __name__ == '__main__':
  url = 'http://xxx.yyy.zzz'
  user = 'admin'
  password = '123456'
  response = requests.get(url=url, auth=HTTPBasicAuth(user, password))
  # 或者
  # response = requests.get(url=url, auth=(user, password))
  print response.status_code

3、摘要式身份认证

# -*- encoding=utf-8 -*-
import requests
from requests.auth import HTTPDigestAuth

if __name__ == '__main__':
  url = 'http://xxx.yyy.zzz'
  user = 'admin'
  password = '123456'
  response = requests.get(url, auth=HTTPDigestAuth(user, password))
  print response.status_code

如果2和3都不行,还是返回401,此时可以试试第4种

使用2和3依旧返回401,此时可以print出response.headers看一下

# -*- encoding=utf-8 -*-

import requests
from requests.auth import HTTPDigestAuth

if __name__ == '__main__':
  url = 'http://xxx.yyy.zzz'
  user = 'admin'
  password = '123456'
  response = requests.get(url, auth=HTTPDigestAuth(user, password))
  print response.status_code
  print response.headers

运行

401
{'Content-Length': '1293', 'X-Powered-By': 'ASP.NET', 'Server': 'Microsoft-IIS/7.5', 'Date': 'Fri, 05 Jun 2020 05:36:23 GMT', 'Content-Type': 'text/html', 'WWW-Authenticate': 'Negotiate, NTLM'}

打印后可看到headers中带有字样'WWW-Authenticate': 'Negotiate, NTLM',表示需要ntlm验证,此时尝试使用第4种[/code]

4、ntlm验证

# -*- encoding=utf-8 -*-
import requests
from requests_ntlm import HttpNtlmAuth
if __name__ == '__main__':
  url = 'http://xxx.yyy.zzz'
  user = 'admin'
  password = '123456'
  response = requests.get(url, auth=HttpNtlmAuth(user, password))
  print response.status_code
  print response.headers

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
Centos下实现安装Python3.6和Python2共存
Aug 15 Python
python正则表达式匹配[]中间为任意字符的实例
Dec 25 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
使用opencv将视频帧转成图片输出
Dec 10 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
keras 多任务多loss实例
Jun 22 Python
在python中对于bool布尔值的取反操作
Dec 11 Python
Python包资源下载路径报404解决方案
Nov 05 #Python
如何一键升级Python所有包
Nov 05 #Python
python实现磁盘日志清理的示例
Nov 05 #Python
Python常用外部指令执行代码实例
Nov 05 #Python
Python Pandas数据分析工具用法实例
Nov 05 #Python
Python jieba结巴分词原理及用法解析
Nov 05 #Python
Python根据字符串调用函数过程解析
Nov 05 #Python
You might like
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
php的urlencode()URL编码函数浅析
2011/08/09 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
Python装饰器知识点补充
2018/05/28 Python
浅谈Python 递归算法指归
2019/08/22 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
德国机车企业:FC-Moto
2017/10/27 全球购物
Linux开机引导的步骤是什么
2015/10/19 面试题
计算机软件个人的自荐信范文
2013/12/01 职场文书
网络维护中文求职信
2014/01/03 职场文书
初中同学聚会感言
2014/02/11 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
部门2014年度工作总结
2014/11/12 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
七年级生物教学反思
2016/02/20 职场文书
vue里使用create, mounted调用方法
2022/04/26 Vue.js
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android