Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Downloading a File Protected by NTLM/SSPI Without Prompting For Credentials Using Python on Win32?

I need to download a file on a corporate Sharepoint site using CPython. Existing codebase prevents me from using Ironpython without porting the code, so .NET's WebClient library is out. I also want to download the file without prompting the user to save and without prompting the user for network credentials. I tried other libraries, but they all had short-comings:

  • urllib2 plus python-ntlm: requires user/pass to be provided
  • COM automation of Internet Explorer: requires the user to click 'Save'
  • subprocess using wget or cURL: couldn't get either to authenticate without requesting user/pass

I couldn't find anything in pywin32 that looks like it hooks into urllib2 or provides equivalent functionality. So, is there a way to download the file without requesting credentials and without prompting the user to click 'Save'?

like image 761
technomalogical Avatar asked Jan 27 '10 18:01

technomalogical


1 Answers

I ended up finding some VB code from a Microsoft support page that uses a function from urlmon.dll I replicated it with a single line of ctypes code and it accomplished exactly what I needed it to do.

ctypes.windll.urlmon.URLDownloadToFileA(0,url,local_file_name,0,0)
  • url is the location of the resource (in this case, an Excel file on a Sharepoint site)
  • local_file_name is the local path and name of the file to be saved.

This passed credentials across the wire with no prompts.

like image 188
technomalogical Avatar answered Oct 22 '22 23:10

technomalogical