我有一个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
类来包含这个过程吗?
我相信这样做,处理程序必须知道以下内容:
你可以这么自定义一个处理程序吗?如果是这样,有人可以指出如何做到这一点的例子吗?
谢谢
答案 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")