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解析html开发库pyquery使用方法
Feb 07 Python
python基础教程之元组操作使用详解
Mar 25 Python
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
Python 冒泡,选择,插入排序使用实例
Feb 05 Python
python实现应用程序在右键菜单中添加打开方式功能
Jan 09 Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
Python Flask基础教程示例代码
Feb 07 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
使用Python构造hive insert语句说明
Jun 06 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
Python实现简单的猜单词小游戏
Oct 28 Python
Python命令行参数定义及需要注意的地方
Nov 30 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
一个显示天气预报的程序
2006/10/09 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
php中取得文件的后缀名?
2012/02/20 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
围观tangram js库
2010/12/28 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
jQuery实现高亮显示的方法
2015/03/10 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
js实现tab切换效果
2017/02/16 Javascript
angularjs指令之绑定策略(@、=、&amp;)
2017/04/13 Javascript
js实现随机点名小功能
2017/08/17 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
你应该知道的python列表去重方法
2017/01/17 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
详解Django配置JWT认证方式
2020/05/09 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
2014国培学习感言
2014/03/05 职场文书
活动总结的格式
2014/05/07 职场文书
共青团员自我评价范文
2014/09/14 职场文书
办公经费申请报告
2015/05/15 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
创业计划书之烤红薯
2019/09/26 职场文书