|
|
|
Загвоздка с XML-запросом
|
|||
|---|---|---|---|
|
#18+
Проблема в следующем... По протоколу HTTPS соединяюсь с сервером, отсылаю XML-запрос, получаю XML-ответ, пользуюсь данными. Программировал бОльшую часть на C++ Builder. Там проблем не было. Сейчас нужно переписать задачу на Java. Вот отрывок кода: public Object commandButton_action1() { HttpsURLConnection con; URL url; url = new URL(null, " https://address?cmd=zapros", new sun.net.www.protocol.https.Handler()); con = (HttpsURLConnection)url.openConnection(); HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { System.out.println("Есть верификация!"); return true; } }; con.setDefaultHostnameVerifier(hv); SSLSocketFactory ssl = null; ssl = getFactory(new File("c:\\OpenSSL\\mySSL\\mykey.p12"), "qwerty"); con.setDefaultSSLSocketFactory(ssl); con.setDoOutput(true); con.setDoInput(true); String test="<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><parameter1>19</parameter1><parameter2>xcd</parameter2></request>"; byte[] bytes=test.getBytes(); con.setRequestMethod("POST"); con.setUseCaches(false); con.setRequestProperty("Content-Type", "application/xml"); OutputStream writer = con.getOutputStream(); writer.write(bytes); writer.flush(); writer.close(); int rc = con.getResponseCode(); if (rc == HttpsURLConnection.HTTP_OK) { System.out.println("Есть контакт!"); } else { System.out.println(rc); } System.out.println(con.getResponseMessage()); BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); setResp(resp+line+"\r"); } reader.close(); } private static SSLSocketFactory getFactory(File pKeyFile, String pKeyPassword) { KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509"); KeyStore keyStore = KeyStore.getInstance("pkcs12"); InputStream keyInput = new FileInputStream(pKeyFile); keyStore.load(keyInput, pKeyPassword.toCharArray()); keyInput.close(); keyManagerFactory.init(keyStore, pKeyPassword.toCharArray()); SSLContext context = SSLContext.getInstance("SSL"); TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { } public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { } } }; context.init(keyManagerFactory.getKeyManagers(), trustAllCerts, new SecureRandom()); return context.getSocketFactory(); } Вооооооот! В консоли выдаётся дважды: "Есть верификация!" Выдаётся сообщение: "Есть контакт!" Но дальше, когда я прошу распечатать BufferedReader reader, выдаётся XML-ответ: <response status="error"><error code="ERRCMD">unsupported request method GET</error></response> Хотя в коде явно сказано con.setRequestMethod("POST") Помониторили мы с разработчиком этих самых XML-процедур. Он говорит, что от меня реально исходят GET-запросы - отсюда и ошибка. В общем бред какой-то! Причём даже если я не высылаю никакой запрос, а потом запрашиваю ответ, всё равно выдаётся это сообщение. Такое ощущение, что запрос вообще не отправляется. Где ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2012, 20:39:31 |
|
||
|
Загвоздка с XML-запросом
|
|||
|---|---|---|---|
|
#18+
Chicho, Заюзай HttpClient да не мучайся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2012, 21:38:46 |
|
||
|
Загвоздка с XML-запросом
|
|||
|---|---|---|---|
|
#18+
Этот Java код не компилируется и поэтому не может работать даже неправильно. А это что: new sun.net.www.protocol.https.Handler() Это называется жабабыдлокод. Название пакета у этого класса говорит о том, что он не предназначен для использования вами. Зачем использовали? Вы где-то передрали, но неизвестно как оно работает. Вместо этого лучше бы изучить, как сделать правильно. Если вы заведёте этот проект в Eclipse, а не в Notepad-е, то будут показаны и другие ошибки, которые хотя и не препятствуют трансляции, но следовало бы устранить. А то пока в программе нет порядка, труднее понять, почему она работает не так, как надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2012, 02:01:14 |
|
||
|
Загвоздка с XML-запросом
|
|||
|---|---|---|---|
|
#18+
забыл ник, спасибо! Но к сожалению не получится. HttpClient - это апачевский класс, а я работаю в WebLigic Server. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2012, 15:11:42 |
|
||
|
Загвоздка с XML-запросом
|
|||
|---|---|---|---|
|
#18+
Chichoзабыл ник, спасибо! Но к сожалению не получится. HttpClient - это апачевский класс, а я работаю в WebLigic Server. Одно другому не мешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2012, 15:14:44 |
|
||
|
Загвоздка с XML-запросом
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, я понял. Просто надо было к проекту дополнительный .jar подключить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2012, 16:00:23 |
|
||
|
Загвоздка с XML-запросом
|
|||
|---|---|---|---|
|
#18+
Блин! Как к HttpClient 3.1 присобачить SSL? Есть классы, но только для 4.x. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2012, 19:02:17 |
|
||
|
Загвоздка с XML-запросом
|
|||
|---|---|---|---|
|
#18+
Вот как неприятно ругается браузер: javax.faces.el.EvaluationException: java.lang.ClassCastException: com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl cannot be cast to org.apache.http.conn.scheme.SchemeSocketFactory при попытке выполнить: Scheme sc=new Scheme("https", 443, ssl); Такое ощущение, что разработчики HttpClient приложили немалые усилия, чтобы быть несовместимой с SSLSocketFactory. А альтернатива, блин, где? В случае с HttpsURLConnection таких приколов не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2012, 21:04:50 |
|
||
|
Загвоздка с XML-запросом
|
|||
|---|---|---|---|
|
#18+
Эврика! Всё оказалось просто! Вместо авторBufferedReader reader = new BufferedReader(new InputStreamReader (url.openStream() )); надо писать авторBufferedReader reader = new BufferedReader(new InputStreamReader( con.getInputStream() )); Первый вариант прокатывает только для метода GET. Ура! Не повторяйте моих ошибок. Теперь бы на будущее с HttpClient'ом разобраться. Не хочет он SSLSocketFactory воспринимать. Если у кого-то есть опыт https-запросов, подскажите, как прописывать для него ключи и сертификаты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2012, 12:55:00 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38088800&tid=2130297]: |
0ms |
get settings: |
13ms |
get forum list: |
21ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
44ms |
get topic data: |
17ms |
get forum data: |
5ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 287ms |
| total: | 471ms |

| 0 / 0 |
