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 paramiko实现ssh远程访问的方法
Dec 03 Python
python模块之StringIO使用示例
Apr 08 Python
python实现斐波那契数列的方法示例
Jan 12 Python
python实现xlsx文件分析详解
Jan 02 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 Python
Python使用Pickle模块进行数据保存和读取的讲解
Apr 09 Python
django框架ModelForm组件用法详解
Dec 11 Python
python topk()函数求最大和最小值实例
Apr 02 Python
在Python中实现字典反转案例
Dec 05 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
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
原生js实现随机点名
2020/07/05 Javascript
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
Django Rest framework频率原理与限制
2019/07/26 Python
Python递归函数特点及原理解析
2020/03/04 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
365 Tickets英国:全球景点门票
2019/07/06 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
单位单身证明范本
2014/01/11 职场文书
2014年高三毕业生自我评价
2014/01/11 职场文书
超市创业计划书
2014/04/24 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
博物馆观后感
2015/06/05 职场文书
银行资信证明
2015/06/17 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书