尝试向邮递员提出要求,得到了所需的答复。
用于发出相同请求的java代码如下: fails,状态为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);
}
邮递员请求根本不需要任何标头(甚至不需要User-Agent,只保留Host,不需要cookie)来获得所需的响应。甚至在浏览器中导航到链接都会显示json响应。
Postman Request Image with cookies
谢谢。祝你今天过得愉快。
发布于 2021-02-09 18:35:48
我非常确定,产生403响应的原因是postman中的2个cookie,而不是java代码中的2个cookie。
Postman是一个google chrome插件,所以当你使用chrome进行连接时,也许你会将cookie存储在缓存中。
您还需要将它们添加到java代码中。
发布于 2021-02-09 23:36:52
首先,感谢您的回答和回复。
因此,我发现我试图访问的清单被设置为仅对朋友可见,因此响应为403。因此,它确实适用于设置为公共的库存。
对不起,我应该先检查一下的。
我仍然不明白的是,邮递员桌面客户端是如何获得预期的响应的?我知道chrome能够获得清单是因为我有活跃的steam登录和cookie,这些cookie应该已经发送,但邮递员请求除了sessionid和country之外没有任何cookie。如果有人能解释这是怎么发生的,那真的会对我有帮助。
https://stackoverflow.com/questions/66116589
复制相似问题