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进行稳定可靠的文件操作详解
Dec 31 Python
35个Python编程小技巧
Apr 01 Python
python实现数值积分的Simpson方法实例分析
Jun 05 Python
Python实现绘制双柱状图并显示数值功能示例
Jun 23 Python
Python实现多线程的两种方式分析
Aug 29 Python
Python3.5实现的罗马数字转换成整数功能示例
Feb 25 Python
python实现socket+threading处理多连接的方法
Jul 23 Python
Django之路由层的实现
Sep 09 Python
python树的同构学习笔记
Sep 14 Python
Python小白不正确的使用类变量实例
May 29 Python
Python中的Cookie模块如何使用
Jun 04 Python
解决virtualenv -p python3 venv报错的问题
Feb 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
php中取得URL的根域名的代码
2011/03/23 PHP
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
python实现多线程网页下载器
2018/04/15 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
Numpy之reshape()使用详解
2019/12/26 Python
在pycharm中实现删除bookmark
2020/02/14 Python
python爬虫请求头的使用
2020/12/01 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
高中毕业自我鉴定范文
2013/10/02 职场文书
春节联欢会主持词
2014/03/24 职场文书
市场策划求职信
2014/08/07 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
小学语文教师竞聘演讲稿范文
2019/08/09 职场文书
解析Java异步之call future
2021/06/14 Java/Android