win32com winhttp发布请求文件

时间:2018-05-23 03:14:08

标签: python multipartform-data pywin32 win32com winhttprequest

我试图通过身份验证发布请求。

这适用于获取请求:

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。

如何发送文件? (并发送身份验证的东西,我们正在使用NT身份验证)。

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

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

1 个答案:

答案 0 :(得分:0)

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

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