【问题标题】:win32com winhttp post request filewin32com winhttp post 请求文件
【发布时间】:2018-05-23 03:14:08
【问题描述】:

我正在尝试发布带有身份验证的请求。

这适用于获取请求:

import win32com.client
h = win32com.client.Dispatch('WinHTTP.WinHTTPRequest.5.1')
h.SetAutoLogonPolicy(0)
h.Open('GET', url, False)
h.Send()

但我正在尝试使用文件发出发布请求,特别是表单数据

data = {'datasetid': 9,
        'date':"2018-04-16",
        'file':open(r'C:\filename.pdf', 'rb').read()}
h = win32com.client.Dispatch('WinHTTP.WinHTTPRequest.5.1')
h.SetAutoLogonPolicy(0)
h.Open('POST', url, False)
h.SetRequestHeader('Content-Type', 'multipart/form-data')
h.Send(json.dumps(data))

这不起作用,因为“字节”不是 JSON 可序列化的。 将 'rb' 更改为 'r' 不起作用,因为 'charmap' 编解码器无法解码位置 143 中的字节 0x9d。

如何发送文件? (同时发送 Authentication 的东西,我们使用的是 NT Authentication)。

我尝试过使用 requests_ntlm 并且有效。但我想找到一种不需要键入身份验证的方法。使用 requests_ntlm,我需要输入类似 session.auth = HttpNtlmAuth('username','password') 的内容。

我正在寻找像 win32com SetAutoLogonPolicy(0) 这样的解决方案,这样就无需输入用户名和密码。

【问题讨论】:

    标签: python multipartform-data pywin32 win32com winhttprequest


    【解决方案1】:

    https://github.com/brandond/requests-negotiate-sspi

    像往常一样适用于自动登录和 requests.post。但是,仍然想知道 h.Send() 如何处理文件。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-05
      • 2011-01-31
      • 2012-05-26
      • 1970-01-01
      • 2013-01-03
      • 2011-04-17
      • 2017-05-22
      • 2018-02-09
      相关资源
      最近更新 更多