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(urlparse)模板的使用方法总结
Oct 13 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
python Event事件、进程池与线程池、协程解析
Oct 25 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
python 生成任意形状的凸包图代码
Apr 16 Python
python有几个版本
Jun 17 Python
python如何删除文件、目录
Jun 23 Python
如何使用python自带IDLE的几种方法
Oct 10 Python
Python的三个重要函数详解
Jan 18 Python
通过Python把学姐照片做成拼图游戏
Feb 15 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面向对象——访问修饰符介绍
2012/11/08 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
jquery animate 动画效果使用说明
2009/11/04 Javascript
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
旺旺在线客服代码 旺旺客服代码生成器
2018/01/09 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
layDate日期控件使用方法详解
2018/11/15 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
2014年租房协议书范本
2014/10/30 职场文书
婚宴新娘致辞
2015/07/28 职场文书
python面向对象版学生信息管理系统
2021/06/24 Python
《废话连篇——致新手》——chinapizza
2022/04/05 无线电