11.20 xmlrpclib -- accesso a client XML-RPC

Nuovo nella versione 2.2.

XML-RPC è un metodo per Chiamate a Procedure Remote che utilizza come trasporto l'XML trasferito via HTTP. Con questo metodo, un client può chiamare metodi con parametri su server remoti (il server viene indicato da una URI) e gli vengono restituiti dei dati strutturati. Questo modulo supporta la scrittura di codice client XML-RPC; gestisce tutti i dettagli sulla traduzione tra oggetti Python conformi e XML durante le operazioni.

class ServerProxy( uri[, transport[, encoding[, verbose[, allow_none]]]])
Un'istanza ServerProxy è un oggetto che gestisce le comunicazioni con un server remoto XML-RPC. Il primo argomento richiesto è una URI (Uniform Resource Indicator) e normalmente è l'URL del server. Il secondo argomento (facoltativo) è un'istanza di base per il trasporto; il modo predefinito è un'istanza interna per HTTPS SafeTransport; altrimenti URL ed istanza interna HTTP Transport. Il terzo argomento (facoltativo) è una codifica, il cui valore predefinito è UTF-8. Il facoltativo quarto argomento è un'opzione di debugging. Se allow_none è vera, la costante Python None verrà tradotta in XML; il comportamento predefinito per None è il sollevamento di un'eccezione TypeError. Questa è un'estensione comunemente usata per la specifica XML-RPC, ma non viene supportata da tutti i client e da tutti server; vedere http://ontosys.com/xml-rpc/extensions.htmlper una descrizione.

Entrambe le modalità di trasporto, HTTP ed HTTPS, supportano le estensioni della sintassi del'URL per l'autenticazione di base HTTP: http://user:pass@host:port/path. La porzione user:pass viene codificata in base64 come un'intestazione HTTP `Authorization', ed inviata al server remoto come parte del processo di connessione quando si richiama un metodo XML-RPC. Si ha bisogno di usare questo meccanismo solo quando il server remoto richiede una autenticazione di base con utente e password.

L'istanza restituita è un oggetto proxy con metodi che possono essere usati per invocare le corrispondenti chiamate RPC sul server remoto. Se il server remoto supporta l'API per l'introspezione, il proxy può essere usato anche per richiedere al server remoto quali metodi supporta (NdT: scoperta servizi - service discovery) ed analizzare altri metadata associati al server.

I metodi dell'istanza ServerProxy utilizzano come argomenti tipi base di Python ed oggetti, e restituiscono tipi base di Python e classi. I tipi si conformano (per esempio possono essere serializzati attraverso XML), inclusi i seguenti (ed eccetto dove indicato, vengono deserializzati come alcuni tipi di Python):

Nome  Significato 
boolean Le costanti True e False
integers Passati direttamente
floating-point numbers Passati direttamente
strings Passati direttamente
arrays Ogni tipo di sequenza Python contenente elementi conformabili. Gli Array vengono restituiti come liste
structures Un dizionario Python. La chiave deve essere una stringa, il valore può essere qualsiasi tipo conformabile
dates in secondi a partire da epoch; passa in un'istanza della classe wrapper DateTime
binary data passa in un'istanza della classe wrapper Binary

Questo è l'intero insieme dei tipi di dati supportati da XML-RPC. Chiamate di metodi possono anche sollevare una speciale istanza di Fault, usata per segnalare errori a server XML-RPC, o ProtocolError usato per segnalare un errore nello strato di trasporto HTTP/HTTPS. Fare attenzione che a partire da Python 2.2 si possono derivare tipi built-in, e che il modulo xmlrpclib non supporta attualmente la serializzazione di istanze di queste sotto classi.

Quando si passa una stringa, caratteri speciali per XML come "<", ">" e "&" sono automaticamente preceduti dal carattere di protezione (NdT: la barra rovesciata). Comunque è nella responsabilità del chiamante sincerarsi che la stringa sia priva di caratteri non consentiti in XML, come i caratteri di controllo ASCII che vanno dal valore 0 al 31; ignorando questo particolare si ottengono richieste XML-RPC che non sono ben formate per XML. Se si devono passare stringhe arbitrarie attraverso XML-RPC, usare la classe wrapper Binary descritta sotto.

Server è considerato come un alias per ServerProxy per compatibiltà con il passato. Il nuovo codice dovrebbe usare ServerProxy.

Vedete anche:

XML-RPC HOWTO
Una buona descrizione delle operazioni XML e programmi client in diversi linguaggi. Contiene tutto quanto uno sviluppatore di client XML-RPC deve conoscere.
XML-RPC-Hacks page
Estensioni per varie librerie open-source per supportare introspezione e chiamate multiple.



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.