java - 放心测试——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 响应,用户名和密码输入为空。
解决方案
错误 401表示您的请求未经授权。
对于授权,通常在登录时会给您一个令牌,您必须将其保存在您的缓存/本地内存中,并且每当您与服务器通信时,您必须将其添加到您的请求标头中(用于您自己的服务器介绍)
在您的情况下,您似乎可以/login?get_csrf_token
在登录后获取令牌。请注意,您不需要登录服务的授权。
现在,从服务器获取令牌后,如何将其添加为请求标头? 请参阅 REST 保证文档
推荐阅读
- excel - 为什么在 VBA 中单独工作时多个 subs 不能一起工作?
- database-design - 针对分组操作优化 Redshift 性能
- c - 几个语句while循环
- amazon-web-services - 从 Ingress 到 NodePort 服务
- migration - 从 389 目录服务器迁移到外部 OpenDJ
- pine-script - 如何在收盘或 X 利润高于前高时平仓?
- ruby - 如何安装 ruby-augeas gem?(macOS 莫哈韦)
- c# - DbContext 正在跟踪对其他线程上正在处理的实体的更改
- python - 使用 VSCode、python 和绝对导入时未发现任何测试
- django - 登录django后重定向用户