我正在尝试使用此代码段在google api服务上进行身份验证:
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> converters =
new ArrayList<HttpMessageConverter<?>> restTemplate.getMessageConverters());
converters.add(new PropertiesHttpMessageConverter());
restTemplate.setMessageConverters(converters);
Properties result = preparePostTo(AUTHENTICATION_URL)
.using(restTemplate)
.expecting(Properties.class)
.withParam("accountType", "HOSTED_OR_GOOGLE")
.withParam("Email", email)
.withParam("Passwd", password)
.withParam("service", "reader")
.withParam("source", "google-like-filter")
.execute();
String token = (String) result.get("Auth");
现在我有令牌:DQAAAI ... kz6Ol8Kb56_afnFc(超过100个字符长度)并尝试获取网址:
URL url = new URL(LIKERS_URL + "?i=" + id);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.addRequestProperty("Authorization", "GoogleLogin Auth=" + token);
return url;
但是当我使用此URL获取内容时,我得到401 Client Error异常。它能是什么?
根据这个问题,Google Reader Authentication problem一切都应该没问题。
我可以将内容简单地粘贴到浏览器中。
答案 0 :(得分:1)
尝试使用OAuth进行Google阅读器身份验证/授权。您只需使用OAuth库并向Google注册您的应用即可获取OAuth使用者密钥/密码。
您可以使用oauth.googlecode.com或Scribe。
答案 1 :(得分:0)
嘿,不知道这是否会对你有所帮助,或者你是否还在关心但我终于使用以下ConsoleApp代码进入Google阅读器(注意这是C#,但应该很容易转换为Java)。 / p>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
getAuth();
Console.ReadLine();
}
public static void getAuth()
{
//put in the username and password
string postData = "Email=YOURUSERNAME@gmail.com&Passwd=YOURPASSWORD&service=reader&source=some-uniqueapp-v1";
WebRequest authReq = WebRequest.Create("https://www.google.com/accounts/ClientLogin");
authReq.ContentType = "application/x-www-form-urlencoded";
authReq.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(postData);
authReq.ContentLength = bytes.Length;
Stream os = authReq.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
WebResponse resp = authReq.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
string responseContent = sr.ReadToEnd().Trim();
string[] responseSpilt = responseContent.Split('=');
string authticket = responseSpilt[3];
Console.WriteLine("Auth = " + authticket);
sr.Close();
getToken(authticket);
}
public static void getToken(string auth)
{
WebRequest tokenReq = WebRequest.Create("https://www.google.com/reader/api/0/token");
tokenReq.ContentType = "application/x-www-form-urlendcoded";
tokenReq.Method = "GET";
tokenReq.Headers.Add("Authorization", "GoogleLogin auth=" + auth);
WebResponse response = tokenReq.GetResponse();
if (response == null) return;
StreamReader sr = new StreamReader(response.GetResponseStream());
string respContent = sr.ReadToEnd().Trim();
string[] respSplit = respContent.Split('/');
string token = respSplit[2];
Console.WriteLine(" ");
Console.WriteLine("Token = " + token);
sr.Close();
}
}
}