首页 > 解决方案 > 放心测试——API request 401 bad request

问题描述

我在通过邮递员或 Java lib“io.restassured”发送 API 请求时遇到问题。当我在 UI 上执行相同的操作时,请求会返回正确的响应,但是当我通过邮递员或 java 代码尝试相同的操作时,我得到:

401 错误请求

你的浏览器发送了一个无效的请求。

java代码

       public static void main(String[] args) {

        String requestUrl = "exampleBaseUrl/app/reports/api/rest/v1/graphs?context=shipper&reports_type=freights";

 Response response = RestAssured.given().relaxedHTTPSValidation().header("x-csrf-token", "18ea65e740eb0ddddadf0ef435d92564").
            when().
            get(requestUrl);
    }

我认为身份验证有问题,因为在开发工具中我可以看到 CSRF_token 的 Get 请求,它看起来像这样:

令牌的端点:

/login?get_csrf_token

对于这个请求,我得到以下回复:

{"csrf_token":"18ea65e740eb0ddddadf0ef435d92564"}

我不知道如何解决这个问题,我还尝试通过向令牌的端点发送一个 get 请求来通过 java 代码获取令牌/login?get_csrf_token ,这个得到我的 HTML 响应,用户名和密码输入为空。

标签: javarestapiauthenticationcsrf

解决方案


错误 401表示您的请求未经授权。

对于授权,通常在登录时会给您一个令牌,您必须将其保存在您的缓存/本地内存中,并且每当您与服务器通信时,您必须将其添加到您的请求标头中(用于您自己的服务器介绍)

在您的情况下,您似乎可以/login?get_csrf_token在登录后获取令牌。请注意,您不需要登录服务的授权。

现在,从服务器获取令牌后,如何将其添加为请求标头? 请参阅 REST 保证文档


推荐阅读