Я пишу приложение Java для личного использования для системы BlackBerry 6.x.
Так что я столкнулся с огромным препятствием в своей разработке. По сути, мне нужно приложение для подключения к определенной c веб-странице для получения некоторых данных. Поскольку мне нужно войти на сайт с использованием открытого текста, я бы настоятельно предпочел использовать HTTPS.
По какой-то причине, которую я просто не могу решить, устройство просто не подключится к сайту, к которому нужно подключиться, и многим другим.
Страницы, которые устройство полностью способно загрузить включают https://www.google.com.au и https://www.youtube.com.
Страницы, на которые устройство не может подключиться к , включая https://github.com и https://duckduckgo.com.
Примечания:
- Эта проблема возникает как в эмуляторе BlackBerry, так и на физическом устройстве. В качестве физического устройства используется BlackBerry Curve 9300 под управлением BlackBerryOS 6.3. Эмулятор это нечто похожее. (Эмулятор 9600, поставляемый с BlackBerry 7.x JDK, также имеет те же проблемы.)
- Страницы, которые не могут быть доступны через код Java с использованием HTTPS, также не могут быть доступны с помощью браузера по умолчанию в системе. Несмотря на то, что он может нормально подключаться к этим сайтам с помощью стороннего браузера Opera Mini.
- Эта проблема возникает только при попытке использовать HttpsConnection вместо HttpConnection. Я могу подключиться к сайту, если я использую небезопасную HttpConnection, хотя я не могу использовать это sh.
Вот общий смысл того, что я пытаюсь запустить на устройство:
public static final String SITE_URL = "https://duckduckgo.com";
HttpsConnection conn = null;
try {
// Create connection
conn = (HttpsConnection) Connector.open(SITE_URL + ";deviceside=true;interface=wifi", 3, true);
// Try print certificate information
Certificate c = conn.getSecurityInfo().getServerCertificate();
Dialog.alert("Issuer: " + c.getIssuer() + " subj:" + c.getSubject());
// Getting response code opens connection, sends request,
// and reads HTTP headers.
int rcode = conn.getResponseCode();
if (rcode != HttpsConnection.HTTP_OK) {
throw new IOException ("HTTP response: " + rcode);
}
Dialog.alert("Response: " + rcode);
} catch (ClassCastException e) {
throw new IllegalArgumentException("Not a HTTP URL");
} catch (IOException e) {
Dialog.alert("IOException: " + e.getMessage());
} finally {
// Close connection and stream.
if (is != null) { is.close(); }
if (conn != null) { conn.close(); }
}
Если я изменю SITE_URL
на что-то, к чему я могу подключиться (https://www.google.com.au и др.), тогда код работает нормально и я получаю HTTP 200. Когда я пытаюсь подключиться, чтобы сказать, https://duckduckgo.com, программа просто генерирует IOException. (В частности, похоже, что это TLSIOException, если я перехватываю все соответствующие подклассы IOException) и возвращает ноль при вызове getMessage()
.
Спасибо,
Любая помощь или предложения приветствуются.