#java #httpclient #steam #steambot
#java #httpclient #Steam #steambot
Вопрос:
Попытался запросить с помощью postman, который дает желаемый ответ.
Код Java, используемый для выполнения того же запроса, как показано ниже, завершается ошибкой со статусом 403.
String url = "https://steamcommunity.com/inventory/76561198865293952/440/2?l=englishamp;count=5000";
String cookiesString = "sessionid=" generateSessionId() ";steamCountry=IN|e744269b3c4e531facb33ecaff29eb44";
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);
}
Для запроса Postman вообще не нужны никакие заголовки (даже User-Agent, сохраняется только хост, файлы cookie не требуются), чтобы получить желаемый ответ. Даже переход по ссылке в браузере показывает ответ json.
Postman запрашивает изображение с файлами cookie
Спасибо. Хорошего дня.
Комментарии:
1. На скриншоте Postman показаны два файла cookie. Взгляните на них. Даже в Chrome я получаю 403, так что это похоже на поведение по умолчанию при неаутентификации.
2. URL-адреса запросов разные, возможно, uri в вашем коде требует какой-либо формы аутентификации, в то время как в postman нет
3. @FreeBird кажется вероятным, что в файлах cookie хранятся данные авторизации / сеанса?
4. @Gavin да, я тоже так подозреваю.
5. Спасибо за ответ, ребята, файлы cookie были потому, что я сделал тот же запрос раньше без файлов cookie, а затем steam установил файлы cookie sessionid и steamCountry. Я использую настольное приложение Postman, а не плагин chrome, оно все еще каким-то образом связано?
Ответ №1:
Я почти уверен, что 2 файла cookie, которые у вас есть в postman, а не в коде Java, отвечают за получение ответа 403.
Postman — это плагин Google Chrome, поэтому при подключении к Chrome, возможно, вы сохранили в кэше файлы cookie.
Вам также необходимо добавить их в код Java.
Комментарии:
1. Итак, я добавил два файла cookie в запрос. Я обновил приведенный выше вопрос с его помощью. По-прежнему имеет тот же ответ. Я даже пытаюсь использовать тот же идентификатор сеанса, что и у postman. Также я знаю, как работает идентификатор сеанса, поскольку я использую его со своим торговым ботом steam, там этот метод вычисления идентификатора сеанса работает нормально.
2. Также добавлено изображение с файлами cookie. Спасибо за ответ.
Ответ №2:
Во-первых, спасибо за все ваши ответы и ответы.
Итак, я обнаружил, что инвентарь, к которому я пытался получить доступ, был установлен видимым только для друзей, поэтому ответ был 403. Таким образом, он работает для инвентаризаций, для которых установлено значение public.
Извините, я должен был сначала проверить это.
Чего я до сих пор не понимаю, так это как клиент postman desktop получил предполагаемый ответ? Я понимаю, что chrome смог получить инвентарь, потому что у меня активный вход в Steam с файлами cookie, которые были бы отправлены, но в запросе postman не было никаких файлов cookie, кроме идентификатора сеанса и страны. Если бы кто-нибудь мог объяснить, как это происходит, это действительно помогло бы мне.