Основываясь на некотором вопросе SO, который я видел ранее, я использую WinHttpRequest
внутри Inno Setup, чтобы сделать запрос GET
веб-серверу (localhost:8000
прямо сейчас). Минимальный код ниже, запрос на встроенный сервер отладки Django (python manage.py runserver
).WinHttpRequest в Inno Setup не отправляет учетные данные с заголовком Authenticate
procedure InitializeWizard();
var
WinHttpReq: Variant;
url: string;
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER: integer;
begin
url := 'http://localhost:8000/odbc/test/';
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER := 0;
WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
WinHttpReq.Open('GET', url, false);
WinHttpReq.SetRequestHeader('Accept','application/json');
WinHttpReq.SetCredentials('username','password',HTTPREQUEST_SETCREDENTIALS_FOR_SERVER);
WinHttpReq.Send();
MsgBox(WinHttpReq.Status, mbInformation, MB_OK);
MsgBox(WinHttpReq.ResponseText, mbInformation, MB_OK);
end;
Это дает мне 403, аутентификационные данные не предоставляются.
Наоборот, этот код в библиотеке запросов Python работает успешно.
>> import requests
>> r = requests.get('http://localhost:8000/odbc/test/', auth=('username','password'))
>> r.status_code
200
Am I недоразумение как WinHttpRequest
объект работает в? Поскольку Wireshark подтверждает, что заголовок Authorization: Basic *hashstring*
был отправлен в заголовке с запросами Python, но не в случае WinHttpRequest
. Вероятным обходным решением было бы установить заголовок для объекта WinHttpRequest
, но мне просто интересно, если я что-то сделаю неправильно.
Gist с пакетными захватами: https://gist.github.com/anonymous/597468ba76b59dae4a8d7809ee1c6feb
Wireshark скриншоты:
работает для меня (на сервере Apache) - 1) Есть ли у вас какие-либо специальные символы в имя пользователя/пароль? 2) Можете ли вы попытаться захватить HTTP-трафик, используя, например, Wireshark, как для кода Inno Setup, так и для кода Python? И разместить их здесь? Или, по крайней мере, журналы веб-серверов для обоих. –
Добавлены скриншоты захвата проводов. Есть ли лучший формат для размещения проводок? –
Когда вы останавливаете захват, вы можете сохранить трафик в файл. Обратите внимание, что 'WinHttpRequest' отправляет два HTTP-запроса. В первый раз, без аутентификации, а затем после получения 401, он отправляет второй запрос с авторизацией. Поэтому нам нужно увидеть оба запроса, включая ответы с сервера. –