基于我之前看到的一些 SO question,我正在使用WinHttpRequest
Inno Setup 内部GET
向 Web 服务器发出请求(localhost:8000
现在)。下面的最小代码,请求是到内置的 Django 调试服务器(python manage.py runserver
)。
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 requests 库中的这段代码可以成功运行。
>> import requests
>> r = requests.get('http://localhost:8000/odbc/test/', auth=('username','password'))
>> r.status_code
200
我是否误解了该WinHttpRequest
对象的工作原理?因为 Wireshark 确认Authorization: Basic *hashstring*
在 Python 请求的标头中发送了标头,但情况并非WinHttpRequest
如此。一个可能的解决方法是自己为WinHttpRequest
对象设置标题,但我只是好奇我是否做错了什么。
数据包捕获要点:https ://gist.github.com/anonymous/597468ba76b59dae4a8d7809ee1c6feb
Wireshark 截图: