javax.microedition.pki Сертификат не прошел проверку

Я пытаюсь прочитать ответ JSON от API Google Sheets в приложении Java ME MIDP. Я пробовал следующее с другими адресами, и он получает их содержимое нормально, но фактический API, который я хочу использовать, это Sheets, и он всегда возвращает исключение "Certificate Failed Verification".

HttpConnection c = null;
InputStream is = null;
StringBuffer str = new StringBuffer();
try
    {

     c = (HttpsConnection)Connector.open(urlstring);
     c.setRequestMethod(HttpConnection.GET);
     c.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
     c.setRequestProperty("User-Agent","Profile/MIDP-2.1 Configuration/CLDC-1.1");

     is = c.openInputStream();

     int len = (int)c.getLength();
     int ch;

     while ( (ch = is.read() ) != -1)
         {
         str.append((char)ch);
         }


    }

catch( Exception e ){ alert( ""+e ); }

return str.toString();

Connector.open () неявно возвращает HttpsConnection, если URL начинается с Https, поэтому он все еще должен работать.

Пример запроса HTTPS

https://jsonplaceholder.typicode.com/posts/1

Что не будет работать, но выше также позволяет HTTP-соединения

http://jsonplaceholder.typicode.com/posts/1

Который будет работать.

Однако для Google Sheets требуется HTTPS, поэтому его нельзя получить с помощью вышеуказанного кода. Как я могу сделать запрос GET через HTTPS к API листов? Спасибо.

2 ответа

Решение

Из того, что я понял, кажется, что при подключении по HTTPS телефон использует более старую версию SSL или TLS, которая с тех пор устарела, поэтому некоторые API не отвечают.

Я обнаружил, что если вы делаете запрос API через HTTP с помощью веб-браузера Opera Mini, это работает. Предоставляя вам желаемый ответ, но при ближайшем рассмотрении кажется, что Opera получает ответ для вас и возвращает его через другой URL. В попытке предоставить эти старые устройства, которые не могут использовать более новую версию SSL/TLS, чтобы сделать безопасное соединение самостоятельно.

У меня была похожая проблема при внедрении онлайн-системы рекордов для одной из наших игр. На некоторых телефонах он отлично получал бы рекорды, но на других не работал. Объяснение: в некоторых телефонах есть свой встроенный "MIME-тип проверки". Когда вы звоните (HttpConnection)Connector.open(urlstring) телефон ожидает text/html ответ. Когда он вместо этого получает application/json (или другой) ответ, телефон выдает собственную ошибку "Не найден". Не уверен, что ваша проблема связана, но стоит попробовать? Посмотрите, можете ли вы добавить mime-тип "application/json" в заголовок запроса HttpConnection,

Другие вопросы по тегам