python - 在 Win32 上使用 Python 下载受 NTLM/SSPI 保护的文件而不提示输入凭据?

标签 python winapi curl pywin32

我需要使用 CPython 在企业 Sharepoint 站点上下载文件。现有的代码库阻止我在不移植代码的情况下使用 Ironpython,因此 .NET 的 WebClient 库已经过时了。我还想在不提示用户保存且不提示用户输入网络凭据的情况下下载文件。我尝试了其他库,但它们都有缺点:

  • urllib2 plus python-ntlm: 需要提供用户/密码
  • Internet Explorer 的 COM 自动化:要求用户单击“保存”
  • subprocess 使用 wgetcURL:在不请求用户/密码的情况下无法进行身份验证

我在 pywin32 中找不到任何看起来像 Hook 到 urllib2 或提供等效功能的东西。那么,有没有一种方法可以在不请求凭据且不提示用户单击“保存”的情况下下载文件?

最佳答案

我最终找到了 some VB code from a Microsoft support page它使用了 urlmon.dll 中的一个函数,我用一行 ctypes 代码复制了它,它完全完成了我需要它做的事情。

ctypes.windll.urlmon.URLDownloadToFileA(0,url,local_file_name,0,0)
  • url 是资源的位置(在本例中为 Sharepoint 站点上的 Excel 文件)
  • local_file_name 是要保存的文件的本地路径和名称。

这会在没有提示的情况下通过网络传递凭据。

关于python - 在 Win32 上使用 Python 下载受 NTLM/SSPI 保护的文件而不提示输入凭据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2149496/

相关文章:

python - 无法将文件句柄传递给子进程

c++ - 如何用 Python 判断一个文件在 Windows 上是否可执行?

winapi - 如何确定最佳线程堆栈大小?

php - cURL是否会增加Google Analytics(分析)报告的跳出率?

rest - 解析 REST API 将 ACL 设置为对象

python - 如何在 Django 的 ORM 中创建等效的 LEFT JOIN 查询 (1.11)

Python 正则表达式 : How to select lines between two patterns

python - (Pandas) 创建一个列来计算 DFa 中的值在 DFb 中出现的次数

winapi - 如何覆盖启动 WinUI 3.0 桌面应用程序

c++ - 如何在 C++ 中使用文件指针 CURL POST 文件