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 相关文章推荐
python进阶教程之动态类型详解
Aug 30 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
Python unittest模块用法实例分析
May 25 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
django 使用全局搜索功能的实例详解
Jul 18 Python
python字符串的拼接方法总结
Nov 18 Python
python 初始化一个定长的数组实例
Dec 02 Python
Python实现把类当做字典来访问
Dec 16 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
python实现逻辑回归的示例
Oct 09 Python
GitHub上值得推荐的8个python 项目
Oct 30 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
德生PL550的电路分析
2021/03/02 无线电
一个简单计数器的源代码
2006/10/09 PHP
php flush类输出缓冲剖析
2008/10/19 PHP
php print EOF实现方法
2009/05/21 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
vue组件tabbar使用方法详解
2018/11/06 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
5种Python单例模式的实现方式
2016/01/14 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
python的sorted用法详解
2019/06/25 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
捐款倡议书范文
2014/02/02 职场文书
科级干部考察材料
2014/02/15 职场文书
小学评语大全
2014/04/22 职场文书
公司年会策划方案
2014/05/17 职场文书
新文化运动的口号
2014/06/21 职场文书
反对邪教标语
2014/06/30 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
文明单位创建材料
2014/12/24 职场文书
创业计划书之个人工作室
2019/08/22 职场文书