401 Unauthorized - 请求未到达端点

时间:2017-03-11 18:10:41

标签: android google-cloud-endpoints unauthorized

我无法从Android应用程序访问Google Cloud Endpoints后端。我使用以下相关工具和库:

  • Android Studio 2.3
  • Gradle插件 - com.google.appengine:gradle-appengine-plugin:1.9.49
  • App Engine SDK - com.google.appengine:appengine-java-sdk:1.9.49
  • 端点库 - com.google.appengine:appengine-endpoints:1.9.49
  • 端点依赖关系 - com.google.appengine:appengine-endpoints-deps:1.9.49

我已经使用针对本地开发服务器的物理设备测试文档,这意味着我已将行httpAddress = "0.0.0.0"添加到后端模块中的build.gradle,然后使用以下代码连接到后端:

SomeApi.Builder builder = new SomeApi.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null);
builder.setApplicationName("someapplicationname");
builder.setRootUrl("http://192.168.1.1:8080/_ah/api/");
builder.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer()
{
    @Override
    public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException
    {
        abstractGoogleClientRequest.setDisableGZipContent(true);
    }
});
SomeApi api = builder.build();

然后我使用以下行调用创建的api的方法:

api.someMethod("Some random string").execute();

这就是问题发生的地方。此方法调用触发指向同一方法调用的以下异常(上面的行):

W/System.err: com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
W/System.err:     at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
W/System.err:     at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
W/System.err:     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
W/System.err:     at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056)
W/System.err:     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
W/System.err:     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
W/System.err:     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
W/System.err:     at se.essvagsystemab.mobiltdispenssystem.licensemanager.simple.fragment.MainFragment$13.doInBackground(MainFragment.java:381)
W/System.err:     at se.essvagsystemab.mobiltdispenssystem.licensemanager.simple.fragment.MainFragment$13.doInBackground(MainFragment.java:373)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:304)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
W/System.err:     at java.lang.Thread.run(Thread.java:761)

奇怪的是,请求甚至无法到达端点。客户端端点库似乎抛出异常,因为服务器日志没有显示任何错误迹象,它包含启动服务器时打印的日志消息,以及它。

我不知道造成这种情况的原因,所以非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

事实证明我从<div ng-repeat="y in (filteredItems = (x | filter:myFilter:rec))"> - 输出中复制了错误的IP地址,即使我提到我使用的是正确的IP地址。 Hrrm,尴尬......

在尝试(感觉到)每个可能的解决方案之后,我再次检查了IP,结果发现我复制了标记为 new Scope { Name = "read", DisplayName = "Read data", Type = ScopeType.Resource, Emphasize = false, ScopeSecrets = new List<Secret> { new Secret("secret".Sha256()) } }, new Scope { Name = "write", DisplayName = "Write data", Type = ScopeType.Resource, Emphasize = true, ScopeSecrets = new List<Secret> { new Secret("secret".Sha256()) } } 的那个,这显然不是正确标记为 ipconfig

所以,如果您遇到同样的问题,但仍然觉得自己已经完成了所有事情,请务必在放弃之前仔细检查IP!