我试图弄清楚如何从 Java 中使用 Google ClientLogin API。
我遇到的问题是下面的代码引发了异常:
java.lang.IllegalArgumentException:没有为 Content-Type: text/html 定义解析器;com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:461) 处的 charset=UTF-8 com.google.api.client.googleapis.auth.clientlogin.ClientLogin.authenticate(ClientLogin.java:191 )
据我所知,我需要在我的 Transport 对象中设置一些解析器。我在网上可以找到的所有示例要么使用 GoogleTransport(在 1.7 之前已弃用),要么使用 HttpTransport 但调用似乎不再存在的“addParser()”方法(谈论移动目标)或者他们创建自己的 HttpTransport 子类并在覆盖构造函数中设置解析器(但是我为此找到的示例使用 GoogleUtil 类,即使我很确定我在我的 api 包中似乎没有包含所有依赖的 jar 文件)。
关于如何做到这一点的任何建议?(我知道我可以直接使用原始协议,并且有点希望,但我认为 ClientLogin 类将是一个快速而简单的解决方案)。
用于调用 ClientLogin 的代码如下。
//Note I've checked that googleUserName and googlePassword are set
System.out.println("logging in for:" + googleUserName + "," + googlePassword);
ClientLogin clientLogin = new ClientLogin();
clientLogin.accountType = "HOSTED_OR_GOOGLE";
clientLogin.applicationName = "MyCompany-LoginProxy-version-0.1";
clientLogin.username = googleUserName;
clientLogin.password = googlePassword;
clientLogin.authTokenType = "apps";
com.google.api.client.http.HttpTransport transport = new NetHttpTransport();
clientLogin.transport = transport;
clientLogin.serverUrl = new GenericUrl("https://www.google.com/accounts/ClientLogin");
ClientLogin.Response loginResponse = clientLogin.authenticate();
作为参考,这是文件顶部的导入语句:
import com.google.api.client.googleapis.auth.clientlogin.*;
import com.google.api.client.googleapis.json.GoogleJsonRpcHttpTransport;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.apache.ApacheHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.http.HttpParser;
import com.google.api.client.googleapis.GoogleHeaders;
import com.google.api.client.googleapis.json.*;
我正在使用 1.7-beta 版的谷歌客户端库(java)
另请注意 - 我知道 OAuth 是推荐的方法 - 我最初实施了它 - 但事实证明它不适合我正在解决的要求。