获取Session Ticket的Python脚本

时间:2014-10-28 10:54:52

标签: python rest authorization alfresco

我有一个服务,它公开了用于登录的API。在我的浏览器中,如果我这样做

<host>:<port>/myservice/api/login?u=admin&pw=admin

上面的url,返回一张票,我可以传递给我的连续请求。

More details about the same, here.

下面是我的python脚本。

import urllib

url = 'http://<host>:<port>/myservice/api/login?u=admin&pw=admin'
print 'Retrieving', url
uh = urllib.urlopen(url)
data = uh.read()
print 'Retrieved',len(data),'characters'
print data

当我跑步时,我得到了

IOError: ('http error', 401, 'Authorization Required', <httplib.HTTPMessage instance at 0x<somenumber>>)

现在,我不确定我应该做什么。所以我去了我的浏览器,打开了开发人员的控制台。

显然,网址已转移到其他地方。我看到了两个请求。

第一个击中我正在击打的网址。响应标头有一个位置:参数。

第二个请求命中作为Location参数返回的url。 Authorization标头有'Negotiation

它在响应标题中也有一个setcookie。

现在,我不确定这些信息到底是什么,但是如果有人可以提供帮助的话。感谢

3 个答案:

答案 0 :(得分:2)

我认为您的问题是登录服务的URL错误

如果我将代码更改为:

import urllib, json

url = 'http://localhost:8080/alfresco/service/api/login?u=admin&pw=admin&format=json'
print "Retrieving %s" % url
uh = urllib.urlopen(url)
data = uh.read()
print "Retrieved %d characters" %  len(data)
print "Data is %s" % data

ticket = json.loads(data)["data"]["ticket"]
print "Ticket is %s" % ticket

然后针对新安装的Alfresco 4.2服务器,我获得了admin用户的登录Ticket。

注意使用登录API的json格式 - 更容易从JSON解析,以及登录api的正确路径 - /alfresco/service/api/login

答案 1 :(得分:1)

尝试这两个小改动可能会有所帮助:

1)在传递参数以请求url时使用urllib.urlencode

import urllib
params = urllib.urlencode({'u': 'admin', 'pw': 'admin'})
uh = urllib.urlopen("http://<host>:<port>/myservice/api/login?%s" % params')

2)使用urllib2

发出请求时刺激网络浏览器
import urllib2
req = urllib2.Request('http://<host>:<port>/myservice/api/login?u=admin&pw=admin', headers={ 'User-Agent': 'Mozilla/5.0' })
uh = urllib2.urlopen(req)

答案 2 :(得分:0)

401是未经授权的错误!这意味着您无权访问API。您是否已注册API密钥和访问令牌?

检查401错误的详细说明:

http://techproblems.org/http-error-401/