Java HttpClient Request返回403状态,而邮递员返回预期的响应



尝试向邮差发送请求,但得到期望的响应。

用于发出相同请求的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);
}

邮差请求根本不需要任何报头(甚至不需要User-Agent,只保留Host,不需要cookie)来获得期望的响应。即使在浏览器中导航到链接也会显示json响应。

邮差请求截图

邮差请求带有cookie的图像

谢谢。祝你今天愉快。

我很确定你在postman中而不是在java代码中的2个cookie负责403响应。

邮差是一个谷歌chrome插件,所以当连接w/chrome,也许你存储在缓存中的cookie。

您还需要将它们添加到java代码中。

首先感谢您的回答和回复。

所以我发现我试图访问的库存被设置为只对朋友可见,所以响应是403。因此,它确实适用于设置为public的库存。

对不起,我应该先检查一下。

我仍然不明白的是邮差桌面客户端如何得到预期的响应?我明白,chrome是能够得到库存,因为我有活跃的蒸汽登录与cookie将被发送,但邮差请求没有任何cookie以外的会话id和国家。如果有人能解释一下这是怎么发生的,那就真的对我有帮助了。

相关内容

最新更新