问题描述
尝试向邮递员提出请求,并得到所需的答复。
用于发出相同请求的 java 代码如下失败,状态为 403。
String url = "https://steamcommunity.com/inventory/76561198865293952/440/2?l=english&count=5000";
String cookiesstring = "sessionid=" + generateSessionId() + ";steamCountry=IN%7Ce744269b3c4e531facb33ecaff29eb44";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest
.newBuilder()
.GET()
.header("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/88.0.4324.150 Safari/537.36")
.header("Accept","*/*")
.header("Cookie",cookiesstring)
.uri(URI.create(url))
.build();
HttpResponse<String> response = client.send(request,HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode()); //prints 403
System.out.println(response.body()); // prints �+�� O��%
/**
* Generates a Steam Session Id.
* @return sessionId.
*/
public static String generateSessionId() {
return new BigInteger(96,new Random()).toString(16);
}
邮递员请求根本不需要任何标头(甚至不需要用户代理,只保留主机,不需要 cookie)即可获得所需的响应。甚至在浏览器中导航到链接也会显示 json 响应。
Postman Request Image with cookies
谢谢。祝您有美好的一天。
解决方法
我很确定您在邮递员中而不是在 java 代码中的 2 个 cookie 负责获得 403 响应。
Postman 是一个 google chrome 插件,因此当使用 chrome 连接时,也许您将 cookie 存储在缓存中。
您还需要将它们添加到 java 代码中。
,首先感谢您的回答和回复。
所以我发现我尝试访问的库存设置为仅对朋友可见,因此响应为 403。因此它适用于设置为公开的库存。
对不起,我应该先检查一下。
我仍然不明白的是邮递员桌面客户端是如何得到预期响应的?我知道 chrome 能够获取库存,因为我使用本应发送的 cookie 进行了活跃的 Steam 登录,但邮递员请求除了 sessionid 和 country 之外没有任何 cookie。如果有人能解释这是如何发生的,那真的对我有帮助。