Файл запроса на отправку win32com winhttp

Я пытаюсь отправить запрос с аутентификацией.

Это работает для запроса на получение:

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» не может декодировать байт 0x9d в позиции 143.

Как переслать файл? (И отправьте также аутентификацию, мы используем аутентификацию NT).

Я пробовал использовать request_ntlm, и это работает. Но я хотел бы найти метод, который не требует ввода аутентификации. используя request_ntlm, мне нужно ввести что-то вроде session.auth = HttpNtlmAuth('имя пользователя','пароль').

Я ищу решение, такое как win32com SetAutoLogonPolicy(0), чтобы не было необходимости вводить имя пользователя и пароль.


person Lim Min    schedule 23.05.2018    source источник


Ответы (1)


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

для автологина и request.post работает как обычно. Но все же интересно, как h.Send() работает с файлами. :)

person Lim Min    schedule 23.05.2018