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 相关文章推荐
详解C++编程中一元运算符的重载
Jan 19 Python
python实现画圆功能
Jan 25 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
Python 读写文件的操作代码
Sep 20 Python
下载官网python并安装的步骤详解
Oct 12 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
python中wx模块的具体使用方法
May 15 Python
pytorch 查看cuda 版本方式
Jun 23 Python
Python 打印自己设计的字体的实例讲解
Jan 04 Python
python中Matplotlib绘制直线的实例代码
Jul 04 Python
Python 中的Sympy详细使用
Aug 07 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递归删除目录与文件的方法
2015/01/30 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
JavaScript 学习笔记(五)
2009/12/31 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
Python 多进程和数据传递的理解
2017/10/09 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
wxPython多个窗口的基本结构
2019/11/19 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
2020/03/10 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
校运动会广播稿(100篇)
2014/09/12 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
应届生简历自我评价
2015/03/11 职场文书
小学班级标语口号大全
2015/12/26 职场文书
css height属性中的calc方法详解
2021/06/03 HTML / CSS