URL 找不到时 运行 示例代码
URL not found when running sample code
我正在尝试 运行 我从 Google 获取的样本,看看我是否可以从 App Engine 访问 Google+。我将以下文件添加到我的项目中并设置了 servlet 映射,以便它们在预期的路径上可用。我将它部署到 App Engine 并尝试访问该应用程序。要去 https://mydomain.appspot.com/ gives me Error: NOT_FOUND. Accessing the urls of the servlets gives me the exceptions mentioned below. Samples are taken from https://github.com/google/google-api-java-client-samples/tree/master/plus-appengine-sample
这些样本可能不是最新的,但它们是我从 Google 中找到的最新样本。任何关于我应该怎么做才能使这项工作正常进行的线索都会有所帮助。
我的 类 看起来像这样:
基本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.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 密钥时,您添加了 IP 限制或域限制。您的请求来自您提供的限制以外的其他地方。删除限制或添加正确的 i 格式。
注意实际文档页面的代码应该是最新的。 Activites.search 向下滚动到示例。
我正在尝试 运行 我从 Google 获取的样本,看看我是否可以从 App Engine 访问 Google+。我将以下文件添加到我的项目中并设置了 servlet 映射,以便它们在预期的路径上可用。我将它部署到 App Engine 并尝试访问该应用程序。要去 https://mydomain.appspot.com/ gives me Error: NOT_FOUND. Accessing the urls of the servlets gives me the exceptions mentioned below. Samples are taken from https://github.com/google/google-api-java-client-samples/tree/master/plus-appengine-sample
这些样本可能不是最新的,但它们是我从 Google 中找到的最新样本。任何关于我应该怎么做才能使这项工作正常进行的线索都会有所帮助。
我的 类 看起来像这样:
基本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.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 密钥时,您添加了 IP 限制或域限制。您的请求来自您提供的限制以外的其他地方。删除限制或添加正确的 i 格式。
注意实际文档页面的代码应该是最新的。 Activites.search 向下滚动到示例。