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
,