【发布时间】:2021-02-09 09:53:23
【问题描述】:
尝试向邮递员提出请求,得到所需的响应。
用于发出相同请求的 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
谢谢。祝你有美好的一天。
【问题讨论】:
-
您的 Postman 屏幕截图显示了两个 cookie。看看那些。即使在 Chrome 中,我也会得到 403,因此在未经身份验证时这似乎是默认行为。
-
请求的 url 不同,可能你代码中的 uri 需要某种形式的 Auth,而 postman 中的不需要
-
@FreeBird 似乎 cookie 存储了身份验证/会话详细信息?
-
@Gavin 是的,我也是这么怀疑的。
-
感谢大家的回复,cookies是因为我之前在没有cookies的情况下发出了同样的请求,然后steam设置了sessionid和steamCountry的cookies。我使用的是 Postman 桌面应用程序,而不是 chrome 插件,它仍然以某种方式连接吗?
标签: java httpclient steam steambot