urllib2用于令牌安全性的自定义处理程序

时间:2016-03-18 17:43:38

标签: python python-2.7 urllib2

我有一个python 2.7项目,需要利用python 2.7 urllib2库连接到令牌认证REST端点。表单参数如下:

{
   "username" : "<my username>",
   "password" : "<my password",
   "expiration" : <time in minutes>,
   "referer" : "<referer url>"
   "f" : "json"
}

我知道我可以做一个简单的POST来通过https获取值,但我想知道,你能扩展urllib2.BaseHandler类来包含这个过程吗?

我相信这样做,处理程序必须知道以下内容:

  1. 令牌端点的网址
  2. 引用者
  3. 用户名/密码
  4. 你可以这么自定义一个处理程序吗?如果是这样,有人可以指出如何做到这一点的例子吗?

    谢谢

2 个答案:

答案 0 :(得分:1)

使用python-requests库非常容易。

import requests
from requests.auth import HTTPBasicAuth

data = {
   "username" : "<my username>",
   "password" : "<my password",
   "expiration" : <time in minutes>,
   "referer" : "<referer url>"
   "f" : "json"
}

response = requests.post(url, data=data)
# If the url requires basic http authentication.
response = requests.post(url, auth=HTTPBasicAuth('user', 'pass'), data=data)
# assert response.ok == True
# response.json()
# response.text

# To perform bearer token authentication use some thing like
auth_header = {'Authorization': 'Bearer ' + access_token}
metadata = requests.get(
    API_URL + '/v1/users/self', headers=auth_header).json()

答案 1 :(得分:0)

定义处理程序

import urllib2
import urllib


class ExtendedHandler(urllib2.BaseHandler)
        def __init__(self):
            print "create object"


        def https_request(self,req):
            print "Got a request"
            req.add_data(urllib.urlencode({'username': '<username>', 'password': '<password>', 'expiration': "<time>", 'referer': "<referer>", "f" :"json"}))
            return req

您可以删除仅用于调试的打印语句

如何使用上述处理程序。

创建一个openerDirector

opener = urllib2.build_opener(ExtendedHandler())
opener.open("your httpsurl")