PYTHON实现HTTP基本认证(BASIC AUTHENTICATION)
参考:
- http://www.voidspace.org.uk/python/articles/authentication.shtml#id20
- http://zh.wikipedia.org/wiki/HTTP%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8%AF%81
#! /usr/bin/env python
# -*-coding:utf-8-*- import re
import sys
import base64
import urllib2 class BasicAuth:
def __init__(self, username, password, realm=''):
base_str = "%s:%s" % (username,password)
base_str = "Basic " + base64.encodestring(base_str)[:-1]
self.authline = base_str
self.realm = realm
#print self.authline def visit(self, the_url):
req = urllib2.Request(the_url)
try:
content = urllib2.urlopen(req)
except IOError,e:
#here we *want* fail
pass
else:
print "This page isn't protected by authentication."
sys.exit(1) if not hasattr(e, 'code') or e.code != 401:
#we got an error - but not a 401 error
print "This page isn't protected by authentication."
print 'But we fail for another reason'
sys.exit(1) authline = e.headers['www-authenticate']
print authline
#print e.headers
authobj = re.compile( r'''(?:\s*www-authenticate\s*:)?\s*(\w*)\s+realm=['"]([^'"]+)['"]''',re.IGNORECASE)
matchobj = authobj.match(authline)
if not matchobj:
print 'The authentication header is badly formed.'
print authline
sys.exit(1)
scheme = matchobj.group(1)
realm = matchobj.group(2)
if scheme.lower() != 'basic':
print 'This example only work with BASIC authentication.'
sys.exit(1) req.add_header("Authorization", self.authline)
try:
handle = urllib2.urlopen(req)
except IOError,e:
print "It looks like the username or password is wrong."
sys.exit(1)
thepage = handle.read()
return thepage if __name__ == "__main__":
ba = BasicAuth('admin', 'admin')
content = ba.visit("http://192.168.1.1/images/logo.jpg") #路由器管理页面通常采用基本认证法进行身份认证
with open('logo.jpg', 'w') as f:
f.write(content)
Python升级版:
#! /usr/bin/env python
# -*-coding:utf-8 -*- import urllib2 theurl = 'http://192.168.1.1'
username = 'admin'
password = 'admin' passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, theurl, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener) pagehandle = urllib2.urlopen('http://192.168.1.1/images/logo.jpg')
#with open('tplogo.jpg', 'w') as f:
#f.write(pagehandle.read())
Python终极版:
import requests #http://www.itwhy.org/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/python/python-%E7%AC%AC%E4%B8%89%E6%96%B9-http-%E5%BA%93-requests-%E5%AD%A6%E4%B9%A0.html
r = requests.get('http://192.168.0.1/',auth=('admin','admin'))
Bash终极版
curl -u admin:admin http://192.168.1.1/images/logo.jpg -v
PYTHON实现HTTP基本认证(BASIC AUTHENTICATION)的更多相关文章
- HTTP基本认证(Basic Authentication)的JAVA实例代码
大家在登录网站的时候,大部分时候是通过一个表单提交登录信息. 但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证. 下面来看看一看这个认证的工作过程: 第一步: 客户端发送 ...
- HTTP基础认证Basic Authentication
HTTP基础认证Basic Authentication Basic Authentication是一种HTTP访问控制方式,用于限制对网站资源的访问.这种方式不需要Cookie和Session,只需 ...
- Nancy 学习-身份认证(Basic Authentication) 继续跨平台
开源 示例代码:https://github.com/linezero/NancyDemo 前面讲解Nancy的进阶部分,现在来学习Nancy 的身份认证. 本篇主要讲解Basic Authentic ...
- HTTP基本认证(Basic Authentication)的JAVA示例
大家在登录网站的时候,大部分时候是通过一个表单提交登录信息.但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证.下面来看看一看这个认证的工作过程:第一步: 客户端发送ht ...
- HTTP基本认证(Basic Authentication)的JAVA演示样例
大家在登录站点的时候.大部分时候是通过一个表单提交登录信息.可是有时候浏览器会弹出一个登录验证的对话框.例如以下图,这就是使用HTTP基本认证.以下来看看一看这个认证的工作过程:第一步: clien ...
- Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结
Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...
- HTTP Basic Authentication认证的各种语言 后台用的
访问需要HTTP Basic Authentication认证的资源的各种语言的实现 无聊想调用下嘀咕的api的时候,发现需要HTTP Basic Authentication,就看了下. 什么是HT ...
- 访问需要HTTP Basic Authentication认证的资源的各种开发语言的实现
什么是HTTP Basic Authentication?直接看http://en.wikipedia.org/wiki/Basic_authentication_scheme吧. 在你访问一个需要H ...
- HTTP Basic Authentication认证(Web API)
当下最流行的Web Api 接口认证方式 HTTP Basic Authentication: http://smalltalllong.iteye.com/blog/912046 什么是HTTP B ...
随机推荐
- log4j:WARN Please initialize the log4j system properly.解决
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlA ...
- jquery 的 sort 函数
members = [45, 23, 12, 34];members = members.sort(function(a, b){return a-b; );这里面a-b为升序,b-a降序排列:但a, ...
- Asp.Net MVC 中实现跨域访问
在ASP.Net webapi中可以使用 Microsoft.AspNet.WebApi.Cors 来实现: public static class WebApiConfig { public s ...
- hdu1950 最长上升子序列nlogn
简单. #include<cstdio> #include<cstring> #include<iostream> using namespace std; ; i ...
- hdu5007 字符串
字符串问题.是否出现iPhone Apple等词:我考虑时想到既然是否有这些词,可以写map标记一下:然后又最长的是iPhone,6个单词,所以第一个for遍历所有单词 然后在一个for(1~6),用 ...
- 曲线行驶s弯道技巧图解【转】
s弯道怎么走?在走S弯的时候,最主要的就是控制车的速度,在做每个动作的时候要保持一样的速度,不要一会快一会慢的,在开的时候,因为每个人的身高,体型不一样,每个人看的点位都是不一样的,每次在开的时候要找 ...
- 【bzoj1061】 Noi2008—志愿者招募
http://www.lydsy.com/JudgeOnline/problem.php?id=1061 (题目链接) 题意 给定n天,第i天需要ai个志愿者,有m类志愿者,每类志愿者工作时间为[l, ...
- 最新版本的DBCP数据源配置
弄了我一下午,把该加的包都加进去了还是没用,后来把DBCP的包打开来看看才发现路径不对.配置如下: <!-- 使用dbcp配置数据源 --> <bean id="dataS ...
- Emgu学习之(一)——Emgu介绍
OpenCV“OpenCV是一个开源的计算机视觉库.OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上.OpenCV还提供了Python.Ruby.MATLA ...
- mysql is marked as crashed and should be repaired错误
1.mysql数据存放路径默认为/var/lib/mysql/目录 2.用myisamchk命令修复数据表,如: myisamchk -c -r talbe.MYI