# coding=utf-8
__author__ = 'mac'
import requests
"""
Http Basic基本认证和oAuth 认证区别
"""
"""
基本认证:用用户名/密码来认证,但是它可以用base64码decode出明文的用户名密码信息,故不是特别安全
客户端发送请求---》服务器端要求提供用户名/密码
客户端 Post 用户名/密码----》服务器端接收到密码返回客户端所要请求的信息
"""
BASE_URL="https://api.github.com"
def construct_url(end_point):
return '/'.join([BASE_URL,end_point])
def basic_auth():
"""
基本认证:
此返回的headers中的'Authorization': 'Basic am9saW5nY29tZTXXXXXXXXXX'可以通过base64返回明文的用户名密码
python中:
import base64
base64.b64decode('am9saW5nY29tZTXXXXXXXXXX')
"""
response=requests.get(construct_url('user'),auth=('jolingcome','Xxxxx'))
print response.text
print response.request.headers
# basic_auth()
def basic_oauth():
"""
oauth:
1.相当于codeware APP登陆时选择githup登录,App的跳转页面会将client_id,scope发送给githup
2.App发post请求,获取access token, githup返回access_token
3. APP 可以根据access_token获取想要的资源
这样子在整个过程中都没有用户的相关信息暴露,access_token它是githup发放的。不是用户的用户名和密码生成的
"""
"""
1.access_token可以用githup生成一个个人的token:https://github.com/settings/tokens
2.将token拷下来:50a29391fad83cdb1a3770e3e3148d3306a3ssss
3.下面操作只是流程的最后一步,已经获得token,可以得到该token权限下的相关内容
"""
headers={'Authorization':'token 50a29391fad83cdb1a3770e3e3148d3306assss'}
response=requests.get(construct_url('user/emails'),headers=headers)
print response.text
print response.request.headers
print response.status_code
# basic_oauth()
#引用requests.auth库
from requests.auth import AuthBase
class GithubAuth(AuthBase):
#后面要传入token
def __init__(self,token):
self.token=token
#__call__括号运算符的重载,下面是相当于重写了headers的内容
def __call__(self,r):
#requests 加headers,并将headrs返回
r.headers['Authorization']=' '.join(['token',self.token])
return r
def basic_oauth_advance():
"""
将header提出出来,后面写的时候就直接用basic_http一样调用
"""
auth=GithubAuth('50a29391fad83cdb1a3770e3e3148d3306a3sss')
response=requests.get(construct_url('user/emails'),auth=auth)
print response.text
basic_oauth_advance()
# if __name__=="__main__":