【问题标题】:Java HttpClient Request return 403 status while postman returns the intended responseJava HttpClient 请求返回 403 状态,而邮递员返回预期的响应
【发布时间】: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 ScreenShot

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


【解决方案1】:

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

Postman 是一个 google chrome 插件,因此当使用 chrome 连接时,也许您将 cookie 存储在缓存中。

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

【讨论】:

  • 所以我确实将两个 cookie 添加到请求中。我已经用它更新了上述问题。还是有同样的反应。我什至尝试使用与邮递员相同的 sessionid。我也知道 sessionid 是如何工作的,因为我将它与我的蒸汽交易机器人一起使用,这种计算 sessionid 的方法工作正常。
  • 还添加了带有 cookie 的图像。感谢您的回复。
【解决方案2】:

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

所以我发现我尝试访问的库存设置为仅对朋友可见,因此响应为 403。因此它确实适用于设置为公开的库存。

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

我仍然不明白的是邮递员桌面客户端如何获得预期的响应?我知道 chrome 能够获取库存,因为我有活动的 Steam 登录,其中包含本来可以发送的 cookie,但邮递员请求除了 sessionid 和国家/地区之外没有任何 cookie。如果有人能解释这是如何发生的,那真的会对我有所帮助。

【讨论】:

    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    相关资源
    最近更新 更多