spring - 对 stockitem 进行 GET 调用的未经授权的 401 错误
问题描述
我正在使用 Java Spring Resttemplate 访问 Acumatica API。对登录端点的 POST 调用工作正常。但是下一个获取 StockItems 的调用会得到一个401 Unauthorized error
.
org.springframework.web.client.HttpClientErrorException: 401 Unauthorized at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:615) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:573) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:544) at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:465) at
现在,当我使用 Postman 和 Chrome Restlet 客户端时,这可以正常工作。我注意到在 Restlet 客户端中,对 API 的 GET 调用传递了由 API 在登录调用中设置的会话 cookie。我尝试在 GET 请求中传递来自登录调用的响应标头。但我仍然得到 401。我使用的是标准的 resttemplate 配置。
HttpEntity<Credentials> entity = new HttpEntity<Credentials>(credentials, headers);
ResponseEntity<String> response = restTemplate.exchange("https://xxxx.acumatica.com/entity/auth/login",
HttpMethod.POST, entity, String.class);
HttpHeaders rHeaders = response.getHeaders();
String set_cookie = rHeaders.getFirst(rHeaders.SET_COOKIE);
if (LOG.isInfoEnabled()) { LOG.info("Response: " + response.toString()); }
if (LOG.isInfoEnabled()) { LOG.info("Set-Cookie: " + set_cookie); }
HttpEntity<String> entity2 = new HttpEntity<String>(response.getHeaders());
ResponseEntity<String> response2 = restTemplate.exchange("https://usell.acumatica.com/entity/Default/6.00.001/StockItem?$expand=Attributes,WarehouseDetails", HttpMethod.GET, entity2, String.class);
使用 Java 的 Acumatica API 客户端是如何解决这个问题的?
解决方案
我没有设置所有的饼干..这就是我所要做的
List<String> cookies = response.getHeaders().get(HttpHeaders.SET_COOKIE);
HttpHeaders requestHeaders = new HttpHeaders();
for (String cookie : cookies) {
requestHeaders.add("Cookie", cookie);
}
推荐阅读
- java - 无法识别的功能实现
- python - Python - Hashlib 解码
- amazon-web-services - 将子域重定向到 AWS 中的相同子域 + 文件夹
- node.js - 在 node.js 中,当使用常用的异步包装器来捕获和转发错误时,(req, res, next) 来自哪里?
- service - 挂起后重启 ProtonVPN,systemd 服务不工作 Ubuntu
- sms - 为什么在 SMS PDU 的十进制八位字节中使用反向半字节?
- php - 如何在 Symfony v2.8/PHP v5.6 中抛出 InvalidArgumentException 内置异常
- algorithm - 证明 n=o(2^{f(n)})?
- vb.net - 如何删除列表框数据源中的重复值?
- google-apps-script - 不隐藏基于特定单元格的所有空行