2010-01-27 13 views
6

Ho bisogno di scaricare un file su un sito di Sharepoint aziendale usando CPython. Il codebase esistente mi impedisce di usare Ironpython senza eseguire il porting del codice, quindi la libreria di .NET WebClient è fuori. Voglio anche scaricare il file senza chiedere all'utente di salvare e senza chiedere all'utente le credenziali di rete. Ho provato altre biblioteche, ma tutti avevano carenze:Download di un file protetto da NTLM/SSPI senza richiedere credenziali utilizzando Python su Win32?

  • urllib2 più python-ntlm: richiede user/pass da fornire
  • COM automazione di Internet Explorer: richiede all'utente di cliccare su 'Salva'
  • subprocess utilizzando wget o cURL: non poteva ottenere sia per l'autenticazione senza richiedere user/pass

non ho trovato nulla in pywin32 che sembra li ke si aggancia a urllib2 o fornisce funzionalità equivalenti. Quindi, c'è un modo per scaricare il file senza richiedere credenziali e senza chiedere all'utente di fare clic su "Salva"?

risposta

4

Alla fine ho trovato some VB code from a Microsoft support page che utilizza una funzione da urlmon.dll l'ho replicata con una singola riga di codice ctypes e ha ottenuto esattamente ciò che mi serviva.

ctypes.windll.urlmon.URLDownloadToFileA(0,url,local_file_name,0,0) 
  • url è la posizione della risorsa (in questo caso, un file di Excel in un sito SharePoint)
  • local_file_name è il percorso locale e il nome del file da salvare.

Questo ha passato le credenziali attraverso il filo senza prompt.