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 相关文章推荐
Django查找网站项目根目录和对正则表达式的支持
Jul 15 Python
使用Python实现BT种子和磁力链接的相互转换
Nov 09 Python
Python解决八皇后问题示例
Apr 22 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 Python
python中取整数的几种方法
Nov 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实现将数组转换为XML的方法
2015/03/09 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
python文本数据相似度的度量
2018/03/12 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
写好自荐信的要点
2013/11/06 职场文书
家佳咖啡店创业计划书
2013/12/27 职场文书
小学数学课题方案
2014/06/15 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
大学生实习推荐信
2015/03/27 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
解除租赁合同协议书
2016/03/21 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技