Questo modulo fornisce un'interfaccia di alto livello per estrarre dati attraverso il World Wide Web. In particolare, la funzione urlopen() è simile alla funzione built-in open(), ma accetta Universal Resurce Locators (URL) invece dei nomi di file. Vengono applicate alcune restrizioni: può aprire solo URL in lettura, e non sono disponibili funzioni di seek.
Definisce le seguenti funzioni pubbliche:
url[, data[, proxies]]) |
Ad eccezione di info() e geturl(), questi metodi possiedono la stessa interfaccia di un oggetto file -- vedere la sezione 2.3.9 di questo manuale. (Non è un oggetto file built-in, comunque, cosìcché non può essere usato in quelle poche situazioni dove è richiesto un vero oggetto file built-in.)
Il metodo info() restituisce un'istanza della classe mimetools.Message contenente meta informazioni associate all'URL. Quando il metodo è HTTP, queste intestazioni sono quelle restituite dal server all'inizio della pagina HTML recuperata (incluso Content-Length e Content-Type). Quando il metodo è FTP restituisce la richiesta. Una intestazione Content-Type sarà presente se il tipo MIME può essere analizzato. Quando il metodo è un file locale, le intestazioni restituite includeranno una rappresentazione Date dell'ora dell'ultima modifica al file, un Content-Lenght indicante la dimensione del file, ed un Content-Type contenente un riferimento al tipo di file. Vedere anche la descrizione del modulo mimetools.
Il metodo geturl() restituisce l'URL reale della pagina. In alcuni casi, il server HTTP redirige un client verso un altra URL. La funzione urlopen() lo gestisce in modo trasparente, ma in alcuni casi il chiamante ha la necessità di sapere verso quale URL è stato rediretto il client. Il metodo geturl() può anche essere usato per posizionarsi su questa URL rediretta.
Se l'url utilizza lo schema identificativo http:
l'argomento facoltativo data può essere indicato per specificare
una richiesta POST
(normalmente il tipo di richiesta è
GET
). L'argomento data deve essere nel formato standard
application/x-www-form-urlencoded; vedere sotto alla
funzione urlencode().
La funzione urlopen() lavora in modo trasparente con i proxy che non richiedono autenticazione. In un ambiente Unix o Windows, impostare le variabili d'ambiente http_proxy, ftp_proxy o gopher_proxy alla URL che identifica il proxy server prima di avviare l'interprete Python. Per esempio (il "%" è il comando del prompt):
% http_proxy="http://www.someproxy.com:3128" % export http_proxy % python ...
In un ambiente Windows, se le variabili ambiente di proxy non sono impostate, l'impostazione del proxy sono ottenute dalla sezione delle impostazioni Internet del registro.
In un ambiente Macintosh, urlopen() recupererà le informazioni sul proxy da Internet Config.
Alternativamente, l'argomento facoltativo proxies può essere
usato per specificare esplicitamente i proxy. Deve essere un
dizionario con lo schema dei nomi delle URL del proxy mappati, un
dizionario vuoto ottiene il risultato di non permettere l'uso di alcun
proxy, e None
(il valore predefinito) causa l'uso delle
impostazioni proxy dell'ambiente, come discusso precedentemente. Per
esempio:
# Usa http://www.someproxy.com:3128 come http proxy proxies = proxies={'http': 'http://www.someproxy.com:3128'} filehandle = urllib.urlopen(some_url, proxies=proxies) # Non usa alcun proxy filehandle = urllib.urlopen(some_url, proxies={}) # Usa i proxy dall'ambiente - entrambe le versioni sono equivalenti filehandle = urllib.urlopen(some_url, proxies=None) filehandle = urllib.urlopen(some_url)
La funzione urlopen() non supporta la specifica esplicita del proxy. Se si ha la necessità di sovrascrivere l'impostazione d'ambiente del proxy, si usi URLopener, o una sua sotto classe come FancyURLopener.
I proxy che richiedono l'autenticazione per il loro utilizzo, non sono attualmente supportati; questa è considerata una implementazione limitata.
Modificato nella versione 2.3: Added the proxies support.
url[, filename[, reporthook[, data]]]) |
(filename, headers)
dove filename è il
nome del file locale in cui l'oggetto può essere trovato, e
headers è qualsiasi cosa il metodo info() dell'oggetto
restituito da urlopen() restituisca (per un oggetto remoto,
possibilmente posizionato nella cache). Le eccezioni sono le stesse
di urlopen().
Il secondo argomento, se presente, specifica la posizione del file su
cui copiare (se assente, la locazione sarà un file temporaneo con un
nome generato). Il terzo argomento, se presente, è una funzione di
aggancio che verrà chiamata una volta sulla connessione della rete ed
una volta che un blocco verrà letto successivamente. L'aggancio
passerà tre argomenti: un numero dei blocchi trasferiti fino a quel
momento, una dimensione in byte del blocco, e la dimensione totale del
file. Il terzo argomento deve essere un -1
sui vecchi server
FTP che non restituiscono la dimensione del file su di una richiesta
di recupero.
Se la url usa lo schema identificativo http:, l'argomento
facoltativo data può essere indicato per specificare una
richiesta POST
(normalmente il tipo di richiesta è GET
).
L'argomento data deve essere nel formato standard
application/x-www-form-urlencoded; vedere sotto la funzione
urlencode().
urllib._urlopener
prima di chiamare
la funzione desiderata. Per esempio, le applicazioni possono voler
specificare un differente header User-Agent: rispetto a
quello definito da URLopener. Questo può essere realizzato
con il seguente codice:
import urllib class AppURLopener(urllib.FancyURLopener): def __init__(self, *args): self.version = "App/1.7" urllib.FancyURLopener.__init__(self, *args) urllib._urlopener = AppURLopener()
) |
string[, safe]) |
'/'
.
Esempio: quote('/~connolly/')
yields '/%7econnolly/'
.
string[, safe]) |
'/'
.
string) |
Esempio: unquote('/%7Econnolly/')
yields '/~connolly/'
.
string) |
query[, doseq]) |
POST
. La stringa risultante è una serie di coppie
chiave=valore
separate dal carattere
"&", dove ogni chiave ed ogni valore vengono
quotati usando la funzione quote_plus() indicata sopra. Se
il parametro facoltativo doseq è presente e valutato come vero,
le coppie individuali chiave=valore
vengono
generate per ogni elemento della sequenza. Quando una sequenza di
tuple di due elementi viene usata come argomento di query, il
primo elemento di ogni tupla è una chiave e il secondo è un valore.
L'ordine dei parametri nella stringa codificata deve corrispondere
all'ordine delle tuple dei parametri nella sequenza. Il modulo
cgi fornisce le funzioni parse_qs() e
parse_qsl() che vengono usate per analizzare le stringhe di
interrogazione nelle strutture dati di Python.
path) |
path) |
[proxies[, **x509]]) |
Predefinitamente, la classe URLopener invia un'intestazioneUser-Agent: di "urllib/VVV", dove VVV è la versione della urllib. Le applicazioni possono definire la propria intestazione User-Agent: attraverso sotto classi di URLopener o FancyURLopener ed impostando l'attributo version dell'istanza ad un appropriato valore stringa prima che il metodo open() venga chiamato.
Il parametro facoltativo proxies dovrebbe essere un dizionario
che mappa gli schemi dei nomi in proxy URL, dove un dizionario vuoto
imposta il proxy completamente ad off. Il suo valore predefinito è
None
, nel cui caso le impostazioni d'ambiente del proxy
verranno usate se presenti, come discusso precedentemente nella
definizione di urlopen().
Parametri di chiavi addizionali, raccolte in x509, vengono usate per l'autenticazione con lo schema https:. Le chiavi key_file e cert_file vengono supportate; entrambe sono attualmente necessarie per recuperare una risorsa da una URL https::
...) |
Note: In accordo alle indicazioni dell'RFC 2616, le risposte 301 e 302 a richieste POST non devono essere automaticamente redirette senza la conferma dell'utente. In realtà, i browser eseguono la redirezione automatica di fronte a queste risposte, cambiando il POST in GET, e urllib riproduce questa caratteristica.
Il parametro passato al costruttore è lo stesso di quello per URLopener.
Note: Quando si esegue l'autenticazione di base, un'istanza FancyURLopener chiama il suo metodo prompt_user_passwd(). L'implementazione predefinita domanda all'utente le informazioni richieste sul terminale in uso. Se necessario, una sotto classe può sovrascrivere questo metodo per supportare caratteristiche più appropriate.
Restrizioni: