Как правильно отправить POST в HTTPS через Java? - PullRequest
0 голосов
/ 12 апреля 2019

Я пишу мод для игры на Java, чтобы проверить, проголосовал ли игрок, используя методы сервера, чтобы получить Steam ID. Я не могу получить хороший ответ от того, что я вижу. Каждый ответ является IOException, который я распечатал «Неверный код ответа».

Я пытался реализовать то, что видел в аналогичных модах для соединений https, но я ничего не получу с этим.

try {
  HttpsURLConnection connection = (HttpsURLConnection) new URL(             "https://somewebsite.com/"
                ).openConnection();
                connection.setSSLSocketFactory(createTrustAllSocketFactory());

                int responseCode = connection.getResponseCode();
                if (responseCode != 200) throw new IOException("Invalid response code.");

                InputStream in = connection.getInputStream();

                ByteArrayOutputStream stringBuffer = new ByteArrayOutputStream();
                byte[] buffer = new byte[256];
                int len = 0;
                while (len != -1) {
                    stringBuffer.write(buffer, 0, len);
                    len = in.read(buffer);
                }

                String result = new String(stringBuffer.toByteArray(), StandardCharsets.UTF_8);
                if (result.equals("1")) {
                    try {
                        performer.addMoney(MonetaryConstants.COIN_COPPER * 5);
                        performer.getCommunicator().sendNormalServerMessage("Thanks for voting! Your rewards have been added to your bank.");
                    } catch (IOException ex) {
                        performer.getCommunicator().sendAlertServerMessage("Failed to add reward. Please submit a support ticket.");
                        ex.printStackTrace();
                    }
                }

private static SSLSocketFactory createTrustAllSocketFactory() throws IOException {
                try {
                    SSLContext ctx = SSLContext.getInstance("TLS");
                    TrustManager[] trustManagers = {
                            new X509TrustManager() {
                                @Override
                                public void checkClientTrusted(X509Certificate[] chain, String authType) {
                                    /* empty */
                                }

                                @Override
                                public void checkServerTrusted(X509Certificate[] chain, String authType) {
                                    /* empty */
                                }

                                @Override
                                public X509Certificate[] getAcceptedIssuers() {
                                    return new X509Certificate[0];
                                }
                            }
                    };
                    ctx.init(null, trustManagers, null);
                    return ctx.getSocketFactory();
                } catch (GeneralSecurityException ex) {
                    throw new IOException(ex);
                }
            }

Ожидается, что когда команда будет введена в игру, сервер вызовет внешний сайт с идентификатором Steam игрока и сгенерирует либо 0, либо 1 на основании того, проголосовали ли они.

Actual получает неправильный код ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...