我需要做一些Assembla认证之前,我分发我的程序,可以使用登录和使用它。
但是,我在如何使用Assembla方面遇到了一些问题,因为我以前从未在Java中真正使用过REST。
我需要获取用户所属的所有空间,然后确定用户是否是我设置的任何空间的一部分,以便允许它们进入应用程序。在网站上,我似乎会用这个:
index.html
但我该怎么用这个呢?我知道我需要发出HTTP请求,但是我不知道如何在Java中形成请求属性。
到目前为止我已经知道了:
String authentication = "username:password";
String encoding = Base64.getEncoder().encodeToString(authentication.getBytes());
URL url = new URL("https://www.assembla.com/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "Basic " + encoding);
conn.connect();
for (Entry<String, List<String>> header : conn.getHeaderFields().entrySet()) {
System.out.println(header.getKey() + "=" + header.getValue());
}有什么帮助吗?
发布于 2015-03-25 19:46:23
老实说,与其滚动自己的库,不如使用OAuth2库。OAuth2需要很多奇怪的怪癖,这使得从头开始使用它(或者仅仅是卷曲)变得困难。我用Node.js编写了一个应用程序,它使用assembla和一个名为simple-oauth的Node OAuth库。可能有几个Java库可以帮助你离开地面(例如。谷歌的https://github.com/google/google-oauth-java-client)。Assembla还不完全清楚在哪里发送什么,因此下面是我的JS代码中的一些示例,可以让您大致了解该做什么:
oauth2 = require('simple-oauth2')({
clientID: config.creds.clientID,
clientSecret: config.creds.clientSecret,
site: 'https://api.assembla.com',
authorizationPath: '/authorization',
tokenPath: '/token'
});
//user hits this route, but doesn't have a auth code, so we redirect
app.get('/', function (req, res) {
res.redirect('/auth');
});
var authorization_uri = oauth2.authCode.authorizeURL({
client_id: config.creds.clientID,
response_type: 'code'
});
app.get('/auth', function (req, res) {
res.redirect(authorization_uri);
});
//callback url route specifed when you made your app
app.get('/callback', function (req, res) {
var code = req.query.code;
//we've got an auth code,
//so now we can get a bearer token
oauth2.authCode.getToken({
code: code,
grant_type: 'authorization_code'
}, saveToken);
function saveToken(error, result) {
if (error) {
console.log('Access Token Error', error);
res.redirect('/');
return;
}
var token = oauth2.accessToken.create(result);
pullSpaces( res, token );
}
});
function pullSpaces ( res, token ) {
request({
method: 'GET',
uri: 'https://api.assembla.com/v1/spaces',
auth: {
bearer: token.token.access_token
}
}, function (error, response, body) {
//this contains a json object of all the user's spaces
});
}我为发送Javascript样本而不是Java而道歉,但我的时间很短;)
发布于 2015-03-23 16:44:04
请注意,它使用OAuth2,因此请求应该有一个授权:承载{令牌}。您使用的是Basic,这是另一种类型的授权。
在您给出的链接中,请求是用curl发出的,带有“授权:无记名令牌”。
curl -i -H“授权:无记名_token”https://api.assembla.com/v1/spaces.xml
希望能解决你的问题。
https://stackoverflow.com/questions/29109283
复制相似问题