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的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
python对数组进行反转的方法
May 20 Python
Python中使用items()方法返回字典元素对的教程
May 21 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
Python循环结构的应用场景详解
Jul 11 Python
Django组件content-type使用方法详解
Jul 19 Python
Python中模块(Module)和包(Package)的区别详解
Aug 07 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
May 17 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
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
Javascript实现的分页函数
2007/02/07 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
深入理解Django-Signals信号量
2019/02/19 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
Python交互式图形编程的实现
2019/07/25 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
料理师求职信
2014/01/30 职场文书
薪酬专员岗位职责
2014/02/18 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
电子商务专业自荐信
2014/06/02 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
走群众路线学习笔记
2014/11/06 职场文书
2014年业务工作总结
2014/11/17 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
初中思想品德教学反思
2016/02/24 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
简单谈谈Python面向对象的相关知识
2021/06/28 Python
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android