====== XML-RPC Verbindungsaufbau ====== Beispiel-Code für den Verbindungsaufbau via XML-RPC ===== Java ===== Sie benötigen hierzu das Modul [[http://ws.apache.org/xmlrpc/|Apache XML-RPC]]. Ersetzen Sie die Werte in spitzen Klammern (z.Bsp. "") gegen die von Ihnen genutzten Werte. import java.net.URL; import java.security.SecureRandom; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.xmlrpc.client.XmlRpcClient; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; public class Test { public static void main(String[] args) throws Exception { String url = "https://:8080/xmlrpc/"; // Client-Config erzeugen XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); config.setBasicPassword(); config.setBasicUserName("admin"); config.setServerURL(new URL(url)); if (url.startsWith("https")) disableCertCheck(); XmlRpcClient client = new XmlRpcClient(); client.setConfig(config); Object result = client.execute("",); } /** * Falls HTTPS aktiviert ist, muessen Sie entweder Java das Jameica-Zertifikat * (Datei->Einstellungen->Zertifikate) bekannt machen. Sie können es mit dem * bei SUN Java mitgelieferten Programm [[http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html|keytool]] * importieren oder (NUR ZU TESTZWECKEN!) die Zertifikats-Prüfung abschalten. * Die folgende Funktion tut dies. * @throws Exception */ private static void disableCertCheck() throws Exception { TrustManager dummy = new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers(){return null;} public void checkClientTrusted (X509Certificate[] certs, String authType) {} public void checkServerTrusted(X509Certificate[] certs, String authType) {} }; SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[]{dummy}, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HostnameVerifier dummy2 = new HostnameVerifier() { public boolean verify(String host, SSLSession session) {return true;} }; HttpsURLConnection.setDefaultHostnameVerifier(dummy2); } } ===== Perl ===== Sie benötigen hierzu das CPAN-Modul [[http://search.cpan.org/dist/RPC-XML/|RPC::XML]]. Ersetzen Sie die Werte in spitzen Klammern (z.Bsp. "") gegen die von Ihnen genutzten Werte. #!/usr/bin/perl use strict; use RPC::XML; use RPC::XML::Client; my $cli = RPC::XML::Client->new('https://:8080/xmlrpc/'); $cli->credentials("XML-RPC","admin",""); my $resp = $cli->send_request('',); ===== PHP ===== Sie benötigen hierzu das PHP-Modul [[http://phpxmlrpc.sourceforge.net/|XML-RPC]] sowie die PHP-Unterstützung für [[http://php.net/manual/de/book.curl.php|Curl]]. Ersetzen Sie die Werte in spitzen Klammern (z.Bsp. “”) gegen die von Ihnen genutzten Werte. include("lib/xmlrpc.inc"); // Ggf. ist es noetig, das Encoding explizit zu setzen, mit dem // die XML-RPC-Implementierung von PHP die Daten liest: $GLOBALS['xmlrpc_internalencoding']='UTF-8'; $client = new xmlrpc_client("https://admin:@:8080/xmlrpc/"); $client->setDebug(0); // alternativ auch "1" oder "2" // Wenn im folgenden Parameter "1" steht, müssen Sie vorher das SSL-Zertifikat aus // Jameica exportieren (Datei->Einstellungen->Zertifikate), es anschliessend mit // "openssl x509 -inform DES -in .crt -out outcert.pem -text" konvertieren und dann // an "/usr/share/curl/curl-ca-bundle.crt" anhängen (Curl wird von PHP intern für // HTTP-Kommunikation verwendet) // Verwenden Sie "0", wenn der Hostname des Server-Zertifikats (Common-Name, CN) nicht geprüft werden soll. $client->setSSLVerifyHost(1); // Aktiviert/deaktiviert die Prüfung des Server-Zertifikates. $client->setSSLVerifyPeer(1); $msg = new xmlrpcmsg("",); $response = $client->send($msg); // Ergebnis auswerten, z.Bsp.: print($response->value()->scalarval()); // Alternativ Fehlermeldung ausgeben print($response->faultString()); ===== Python ===== #!/usr/bin/env python import xmlrpclib class HibiscusSocket(object): def __init__(self, password,xmlrpc_host="localhost",xmlrpc_port=8080,proto="https",username="admin"): self.proto=proto sock = xmlrpclib.ServerProxy ('%s://%s:%s@%s:%s/xmlrpc/' % ( self.proto, username, password, xmlrpc_host, xmlrpc_port)) self.sock = sock def get_bank_name(self,blz): return self.sock.hibiscus.xmlrpc.konto.getBankname(str(blz)) s = HibiscusSocket(password="secret123") bankname = s.get_bank_name(blz="37010050") # bankname sollte jetzt sein "Postbank"