0

Ich versuche ein Beispiel von Google zu erstellen, um zu sehen, ob ich von App Engine auf Google+ zugreifen kann. Ich habe meinem Projekt die folgenden Dateien hinzugefügt und die Servlet-Zuordnung so eingerichtet, dass sie für die Pfade verfügbar sind, auf denen sie erwartet werden. Ich habe es in der App-Engine bereitgestellt und versucht, auf die Anwendung zuzugreifen. Gehen zu https://mydomain.appspot.com/ gibt mir Fehler: NOT_FOUND. Der Zugriff auf die URLs der Servlets gibt mir die unten genannten Ausnahmen. Die Proben stammen aus https://github.com/google/google-api-java-client-samples/tree/master/plus-appengine-sampleURL nicht gefunden, wenn der Beispielcode ausgeführt wird

Diese Beispiele sind möglicherweise nicht auf dem neuesten Stand, aber sie sind die neuesten, die ich von Google finden kann. Jeder Hinweis darauf, was ich tun sollte, um dies zum Funktionieren zu bringen, wäre hilfreich.

Aussehen Meine Klassen wie folgt aus:

BasicServlet:

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>"); 
    } 

} 

Util:

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(); 
    } 
} 

Ausnahme beim Zugriff auf grundlegende 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) 
+0

Bitte denken Sie daran, Stack ist kein Forum. Durch das Löschen der Fehlermeldung habe ich Ihnen bei der Fehlerbehebung geholfen. Sie haben nun die Frage geändert und jeder, der auf die Frage kommt, wird es nicht mehr sehen. Ich habe Ihre Änderung rückgängig gemacht, damit andere von ihr unterstützt werden können. – DaImTo

Antwort

1
{ 
    "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." 
} 

Wenn Sie Ihren API-Schlüssel in der Google Developer Console erstellt haben, haben Sie eine IP-Beschränkung oder Domänenbeschränkung hinzugefügt. Ihre Anfragen kommen von einem anderen Ort als der von Ihnen angegebenen Einschränkung. Entfernen Sie die Einschränkung oder fügen Sie die richtige i-Formation hinzu.

Beachten Sie die Code-Form der tatsächlichen Dokumentation Seiten sollten auf dem neuesten Stand sein. Activites.search Scrollen Sie zu den Beispielen.

+0

Vielen Dank. Dieses Problem ist jetzt vorbei. Der zweite bleibt jedoch. Ich dachte, ich sollte in der Lage sein, den Link zum Sampleservlet zu durchsuchen und mich durch die Google+ Anmeldung zu führen. Irgendeine Idee, warum ich einen Fehler bekomme? –

+0

Sorry, ich kann nicht helfen, ich habe keine Erfahrung mit Servlets. Vielleicht möchten Sie das in eine separate Frage aufteilen. – DaImTo

+0

Ich werde. Danke für Ihre Hilfe. –

Verwandte Themen