3 Stimmen

Android ksoap2 über https

Ist es jemandem gelungen, mit ksoap2 Android über https eine Verbindung zu einem Soap-Server herzustellen?

Ich erhalte ständig die Fehlermeldung "Hostname <###>wurde nicht verifiziert".

Ich mache

AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport (URL);
androidHttpTransport.call(SOAP_ACTION, envelope);

Wenn ich mir andere ksoap anschaue, die nicht für Android ist, dann haben Sie anscheinend einen anderen Aufruf für die Verbindung über https gemeint, aber ich kann keine Möglichkeit finden, dies in der Android-Version zu tun.

Hat jemand einen Weg gefunden oder kennt den Aufruf, den ich verwenden soll?

Danke für Ihre Hilfe

6voto

vlerenc Punkte 277

Nun, auf Android-Geräten müssen Sie zwei Dinge tun:

  1. Bei SSL müssen Sie dem Serverzertifikat vertrauen. Sie können entweder einen gefälschten Vertrauensmanager wie hier installieren ( http://groups.google.com/group/Android-developers/browse_thread/thread/1ac2b851e07269ba/c7275f3b28ad8bbc?lnk=gst&q=certificate und dann allowAllSSL() aufrufen, bevor Sie eine SSL-Kommunikation/einen Aufruf von ksoap2 durchführen) oder etwas mehr Aufwand betreiben, es sicherer machen und den Anweisungen von Saxos folgen, denke ich.
  2. Dann müssen Sie ksoap2-Android oder genauer gesagt die Klasse (KeepAlive)HttpsTransportSE wie folgt verwenden new KeepAliveHttpsTransportSE(host, port, file, timeout); . Die Parameter werden in ein URL-Objekt eingegeben, so dass z. B. der Zugriff auf eine Jira-Installation wie folgt aussieht new KeepAliveHttpsTransportSE("host.whatever", 443, "/rpc/soap/jirasoapservice-v2", 1000)

Übrigens..: Ich habe auf "Android-Geräte" geschrieben, weil ich es nützlich finde, die Sachen zuerst in einer J2SE-Umgebung zu testen und hier fehlt der (KeepAlive)HttpsTransportSE-Kram in der Lib (ich habe ksoap2-j2se-full-2.1.2.jar verwendet). Holen Sie sich einfach die Quellen für die drei Klassen HttpsTransportSE, KeepAliveHttpsTransportSE und HttpsServiceConnectionSE aus ksoap2-Android und fügen Sie sie in Ihr J2SE-Projekt ein und verwenden Sie sie. Es funktioniert und ist eine Produktivitätsverbesserung, um die ersten Schritte mit einem unbekannten Webdienst zu machen (wenn man den Webdienst kennt und weiß, wie man ksoap2 optimiert, nützt es nichts, aber für mich war es praktisch, da ich neu bei ksoap2 und seinem Android-Ableger war).

2voto

johanson Punkte 3137

Android ksoap2 2.5.2 ist verfügbar und unterstützt https

http://code.google.com/p/ksoap2-Android/

Das Problem ist, dass ich nicht ganz sicher bin, wie ich es benutzen soll.

HttpsTransportSE aht = new HttpsTransportSE(host, port, file, timeout)

Was soll ich für den Parameter "Datei" eingeben? Hat jemand eine Idee?

btw AndroidHttpTransport ist in der neuesten Version von ksoap2 veraltet

2voto

Ravishankar V Punkte 323

Sie können den Dateinamen als leeren String ("") angeben. Wenn ich mir den Quellcode von ksoap ansehe, wird der Parameter an java.net.URL übergeben, und in der Javadoc von Sun wird auf file verwiesen - "the file on the host". Ich habe den Versuch aufgegeben, ksoap2 für SOAP https-Aufrufe zu verwenden. Das Problem liegt in der Art und Weise, wie Android SSL-Verbindungen verarbeitet. Die einzige Lösung scheint die Erstellung eines lokalen Schlüsselspeichers zu sein, um das SSL-Zertifikat zu speichern und einen Wrapper um den Apache-Httpclient zu schreiben, um das Zertifikat zu verwenden. Also könnte ich diese Aufrufe genauso gut über REST implementieren. Ich denke, das ist es, was Google von uns erwartet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X