1

我可以从我的应用程序成功访问 Google Drive 和电子表格功能。

所以我有一个 com.google.api.client.auth.oauth2.Credential 的授权实例。

现在我希望执行一个部署为“Web 应用程序”的 Google Apps 脚本。这也需要身份验证才能运行。如果我点击端点并通过身份验证,此脚本将在浏览器中运行。

这是一些伪代码:

String url = "https://script.google.com/a/macros/mycompany.com/s/xxxx/dev";
GenericUrl webAppEndPoint = new GenericUrl(url);
final HttpTransport httpTransport = AndroidHttp.newCompatibleTransport();
HttpRequestFactory requestFactory = httpTransport.createRequestFactory(currentCredential);

// Do POST for service

String requestBody = URLEncoder.encode("{\"name\":\"John Smith\",\"company\":\"Virginia Company\",\"pdf\":\""+getPdfBase64()+"\"}", "UTF-8");
HttpRequest postRequest =requestFactory.buildPostRequest(new GenericUrl(url), ByteArrayContent.fromString(null, requestBody));
postRequest.getHeaders().setAccept("application/json");
postRequest.setFollowRedirects(true);
postRequest.setLoggingEnabled(true);
HttpResponse postResponse = postRequest.execute();

如果我运行代码,我会收到以下错误:com.google.api.client.http.HttpResponseException: HttpResponseException 405 Method Not Allowed

更新:所以 - 最初我发布到错误的 URL(我从浏览器而不是脚本 URL 复制了重定向的 URL)

POST 现在使用上面的代码成功(包括身份验证),但在提交后它仍然不处理 GET 重定向。我现在可以使用它,但能够从服务器获得响应会很好。

我认为 com.google.api.client.http.HttpRequest 不能正确处理经过身份验证的 POST 重定向。

4

2 回答 2

0

1)您不能调用具有身份验证的应用程序脚本。您需要将其作为 contentService 发布为匿名访问。2)您还调用了错误的网址。调用服务 URL,而不是您在浏览器中获得的重定向 URL。

于 2013-10-25T12:35:38.530 回答
0

您的伪代码不是很有启发性;要真正了解发生了什么,您需要显示实际的 HTTP 流量。我应该说虽然 302 重定向到指定的 redict_uri 是 OAuth 2 身份验证流程的正常部分。

于 2013-10-22T00:58:41.980 回答