使用 Pipe (Aerogear) 调用 api 时出现状态码 404 和服务连接错误

Posted

技术标签:

【中文标题】使用 Pipe (Aerogear) 调用 api 时出现状态码 404 和服务连接错误【英文标题】:Getting status code 404 and service connection error while calling api using Pipe (Aerogear) 【发布时间】:2015-08-28 11:17:31 【问题描述】:

我正在为用户和 api 身份验证实施 Keycloak,并成功通过 Keyclaok 服务器进行身份验证,但在调用 API 时出错。

我正在使用 Aerogear 管道库和示例项目来调用服务器 API。 https://github.com/aerogear/aerogear-android-pipe

 try
 AuthzModule authzModule = AuthorizationManager.config("keycloak", OAuth2AuthorizationConfiguration.class)
                .setBaseURL(new URL("URL:8080/auth"))
                .setAuthzEndpoint("/realms/appname/tokens/login")
                .setAccessTokenEndpoint("/realms/appname/tokens/access/codes")
                .setAccountId("keycloak-token")
                .setClientId("app_id")
                .setClientSecret("1b9a1376-bc6e-41d2-b3e5-cee754305a1f")
                .setRedirectURL("Callback")
                .setScopes(Arrays.asList("user"))
                .addAdditionalAuthorizationParam((Pair.create("access_type", "confidential")))
                .asModule();

        authzModule.requestAccess(this, new Callback<String>() 
            @Override
            public void onSuccess(String o) 

                System.out.println("Server Response" + o);
                retrieveFiles(authzModule);

            

            @Override
            public void onFailure(Exception e) 
                Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
            

        );
        PipeManager.config("GetFile", RestfulPipeConfiguration.class)
                .withUrl(new URL("Server_URL"))
                .module(authzModule)
                .forClass(String.class);

        Pipe<Object> documentsPipe = PipeManager.getPipe("GetFile", this);
        documentsPipe.read(new Callback<List<Object>>() 
            @Override
            public void onSuccess(final List<Object> fileses) 
                Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_LONG).show();
            

            @Override
            public void onFailure(Exception e) 
                Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
            
        );

    catch (Exception ex)
        Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show();
    

请提出解决此问题的可能方法。

【问题讨论】:

404 【参考方案1】:
        try
 AuthzModule authzModule = AuthorizationManager.config("keycloak", OAuth2AuthorizationConfiguration.class)
                .setBaseURL(new URL("URL:8080/auth"))
                .setAuthzEndpoint("/realms/appname/tokens/login")
                .setAccessTokenEndpoint("/realms/appname/tokens/access/codes")
                .setAccountId("keycloak-token")
                .setClientId("app_id")
                .setClientSecret("1b9a1376-bc6e-41d2-b3e5-cee754305a1f")
                .setRedirectURL("Callback")
                .setScopes(Arrays.asList("user"))
                .addAdditionalAuthorizationParam((Pair.create("access_type", "confidential")))
                .asModule();

        authzModule.requestAccess(this, new Callback<String>() 
            @Override
            public void onSuccess(String o) 

                System.out.println("Server Response" + o);
                retrieveFiles(authzModule);

            

            @Override
            public void onFailure(Exception e) 
                Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
            

        );


    catch (Exception ex)
        Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show();
    

当服务器发送json响应时,比在header中使用auth token调用简单的http请求。

Headers:Bearer +" auth token", 内容类型:应用程序/json, 接受:应用程序/json

【讨论】:

以上是关于使用 Pipe (Aerogear) 调用 api 时出现状态码 404 和服务连接错误的主要内容,如果未能解决你的问题,请参考以下文章

typescript Aerogear unifiedpush节点发送者打字稿定义

Linux pipe 源代码分析

服务器上取消了多个 API 调用

在 linux 中,使用 pipe() 从分叉进程调用 system()

使用Angular的HttpClient发布到API

Linux系统调用之pipe函数