java - 运行示例代码时找不到 URL

标签 java google-app-engine google-api google-plus google-api-java-client

我正在尝试运行从 Google 获取的示例,看看是否可以从 App Engine 访问 Google+。我将以下文件添加到我的项目中并设置 servlet 映射,以便它们在预期的路径上可用。我将其部署到应用程序引擎并尝试访问该应用程序。前往https://mydomain.appspot.com/给我错误:NOT_FOUND。访问 servlet 的 url 会出现下面提到的异常(exception)情况。样本取自https://github.com/google/google-api-java-client-samples/tree/master/plus-appengine-sample

这些示例可能不是最新的,但它们是我可以从 Google 找到的最新示例。任何关于我应该做什么来使其正常工作的线索都会有所帮助。

我的类(class)如下所示:

基本Servlet:

public class PlusBasicServlet extends HttpServlet {

    /**
     * Enter your API key here from https://code.google.com/apis/console/?api=plus under "API Access".
     */
    private static final String API_KEY = "AIzaSyB9NEc2yQRisoj-rIqgg35yeZXReASMRCI";

    private static final long serialVersionUID = 1;

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        HttpTransport httpTransport = new UrlFetchTransport();
        JsonFactory jsonFactory = new JacksonFactory();

        Plus plus = new Plus.Builder(httpTransport, jsonFactory, null).setApplicationName("")
                .setGoogleClientRequestInitializer(new PlusRequestInitializer(API_KEY)).build();

        ActivityFeed myActivityFeed = plus.activities().search("Google").execute();
        List<Activity> myActivities = myActivityFeed.getItems();

        resp.setContentType("text/html");
        resp.setStatus(200);
        Writer writer = resp.getWriter();
        writer.write("<ul>");
        for (Activity a : myActivities) {
            writer.write("<li>" + a.getTitle() + "</li>");
        }
        writer.write("</ul>");
    }

}

实用程序:

class Utils {

    /**
     * Global instance of the {@link DataStoreFactory}. The best practice is to make it a single
     * globally shared instance across your application.
     */
    private static final AppEngineDataStoreFactory DATA_STORE_FACTORY =
            AppEngineDataStoreFactory.getDefaultInstance();

    private static GoogleClientSecrets clientSecrets = null;
    private static final Set<String> SCOPES = Collections.singleton(PlusScopes.PLUS_ME);
    static final String MAIN_SERVLET_PATH = "/plussampleservlet";
    static final String AUTH_CALLBACK_SERVLET_PATH = "/oauth2callback";
    static final UrlFetchTransport HTTP_TRANSPORT = new UrlFetchTransport();
    static final JacksonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

    private static GoogleClientSecrets getClientSecrets() throws IOException {
        if (clientSecrets == null) {
            clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
                    new InputStreamReader(Utils.class.getResourceAsStream("/plus_secret.json")));
            Preconditions.checkArgument(!clientSecrets.getDetails().getClientId().startsWith("Enter ")
                            && !clientSecrets.getDetails().getClientSecret().startsWith("Enter "),
                    "Download client_secrets.json file from https://code.google.com/apis/console/?api=plus "
                            + "into plus-appengine-sample/src/main/resources/client_secrets.json");
        }
        return clientSecrets;
    }

    static GoogleAuthorizationCodeFlow initializeFlow() throws IOException {
        return new GoogleAuthorizationCodeFlow.Builder(
                HTTP_TRANSPORT, JSON_FACTORY, getClientSecrets(), SCOPES).setDataStoreFactory(
                DATA_STORE_FACTORY).setAccessType("offline").build();
    }

    static String getRedirectUri(HttpServletRequest req) {
        GenericUrl requestUrl = new GenericUrl(req.getRequestURL().toString());
        requestUrl.setRawPath(AUTH_CALLBACK_SERVLET_PATH);
        return requestUrl.build();
    }
}

访问基本 servlet 时出现异常:

Uncaught exception from servlet
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403
{
  "code" : 403,
  "errors" : [ {
    "domain" : "usageLimits",
    "message" : "The request did not specify any referer. Please ensure that the client is sending referer or use the API Console to remove the referer restrictions.",
    "reason" : "ipRefererBlocked",
    "extendedHelp" : "https://console.developers.google.com/apis/credentials?project=602263912930"
  } ],
  "message" : "The request did not specify any referer. Please ensure that the client is sending referer or use the API Console to remove the referer restrictions."
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)

最佳答案

{
  "code" : 403,
  "errors" : [ {
    "domain" : "usageLimits",
    "message" : "The request did not specify any referer. Please ensure that the client is sending referer or use the API Console to remove the referer restrictions.",
    "reason" : "ipRefererBlocked",
    "extendedHelp" : "https://console.developers.google.com/apis/credentials?project=602263912930"
  } ],
  "message" : "The request did not specify any referer. Please ensure that the client is sending referer or use the API Console to remove the referer restrictions."
}

当您在 Google 开发者控制台上创建 api key 时,您添加了 IP 限制或域限制。您的请求来自您提供的限制之外的其他地方。删除限制或添加正确的 i 格式。

请注意,实际文档页面中的代码应该是最新的。 Activites.search向下滚动到示例。

关于java - 运行示例代码时找不到 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41611815/

相关文章:

java - 尝试从 InputStream 重复读取时发生空指针异常

java - 如何在多个 JVM 之间拥有一个通用对象

google-app-engine - 用户帐户(Python 2.7 + Webapp2 + Google App Engine + Jinja + NDB + WTForms)

java - 您可以添加到 Google App Engine 任务的参数的最大数量是多少?

php - Google Analytic API insufficientPermissions 403错误

python - Google Places API 返回不正确\不完整的地点

java - java输入法——准备面试

java - 如何获取作为本地域名同步到 Azure AD 的 Windows 域 FQDN?

java - 谷歌应用引擎+StampBarcode+pdf417 Api

google-api - Google API 库用于 +1 或外卖?