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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
python字符串替换示例
Apr 24 Python
Python Web服务器Tornado使用小结
May 06 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
详解numpy的argmax的具体使用
May 27 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
基于python纯函数实现井字棋游戏
May 27 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
如何写python的配置文件
Jun 07 Python
python中pow函数用法及功能说明
Dec 04 Python
OpenCV-Python实现人脸美白算法的实例
Jun 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
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
php以post形式发送xml的方法
2014/11/04 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
JavaScript将数组转换成CSV格式的方法
2015/03/19 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
Python实现汇率转换操作
2020/05/03 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
销售员自我评价怎么写
2013/09/19 职场文书
高中历史教学反思
2014/02/08 职场文书
三爱活动实施方案
2014/03/19 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android