【问题标题】:Not able to do a post request to an authenticated Hyperledger Composer rest server in Java无法向 Java 中经过身份验证的 Hyperledger Composer 休息服务器发出发布请求
【发布时间】:2018-08-21 10:01:48
【问题描述】:

我无法向经过身份验证的 Composer 休息服务器发出 POST 请求。

  • 我一直在尝试使用 Hyperledger composer rest server 启用身份验证和多用户。
  • 我通过导出启用了基于 Github 的身份验证 COMPOSER_PROVIDERS 变量和带钱包的多用户模式和 身份。
  • 我在 github 中验证了其余服务器,并且 我能够进行休息 Composer Swagger 资源管理器中的操作
  • 我还可以通过通过 带有 access_token 的网址。 http://localhost:4200/api/Trader?access_token=xxxxxxxxxxx 。这行得通 在 Postman 中也是如此。

问题是 即使在将访问令牌作为参数传递之后,我也无法从 java 代码向 composer-rest URL 发出 post 请求。我试过 OKHttpClient、Apache HTTPClient、java.net client、CloseableHTTPClient。

它给我的只是

Server returned HTTP response code: 401

在所有方法中,我都会收到“AUTHORIZATION FAILURE”错误。

我不知道我是否遗漏了什么,因为我可以通过 Postman 进行休息操作。我从 Postman 本身获取代码格式并将其粘贴到 Java 代码中,但它仍然无法正常工作。我不知道我做错了什么,

建议,代码 sn-ps ?

谢谢!

【问题讨论】:

    标签: java rest authentication hyperledger hyperledger-composer


    【解决方案1】:

    既然您设法从 Postman 运行它,那么您显然在您的 java 代码中遗漏了一些东西。

    您的 URL 可能正确,但可能缺少标题、json 类型或类似的东西。

    检查您的 Postman 请求并将其准确复制到您的 Java 代码中,包括所有内容,而不仅仅是 URL。

    记录您的请求并将其与 Postman 请求进行比较,以了解究竟有什么不同。

    【讨论】:

    • 我实际上已经复制了 Postman 代码并将其放入 Java 中,但它无法正常工作。也许我错过了一个标题
    【解决方案2】:

    试试这个代码来检索 cookie:

    public void getCookieUsingCookieHandler() { 
    try {       
        // Instantiate CookieManager;
        // make sure to set CookiePolicy
        CookieManager manager = new CookieManager();
        manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
        CookieHandler.setDefault(manager);
    
        // get content from URLConnection;
        // cookies are set by web site
        URL url = new URL("http://host.example.com");
        URLConnection connection = url.openConnection();
        connection.getContent();
    
        // get cookies from underlying
        // CookieStore
        CookieStore cookieJar =  manager.getCookieStore();
        List <HttpCookie> cookies =
            cookieJar.getCookies();
        for (HttpCookie cookie : cookies) {
                if (cookie.getName().equalsIgnoreCase("access_token")) {
                    System.out.println("CookieHandler retrieved cookie: " + cookie.getValue());
                    break;
                }
    
            }
    } catch(Exception e) {
        System.out.println("Unable to get cookie using CookieHandler");
        e.printStackTrace();
    }
    

    }

    您可以从这里参考:https://docs.oracle.com/javase/tutorial/deployment/doingMoreWithRIA/accessingCookies.html

    【讨论】:

    • 感谢@Honey Shah。我是放这个代码然后做 POST 请求还是?它是如何工作的
    • 是的,你可以放它,但在此之前,你需要检索请求所需的部分令牌。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2021-05-26
    • 2021-05-23
    • 1970-01-01
    相关资源
    最近更新 更多