Ответ 1
Основываясь на рекомендации jsobo по использованию библиотеки WinHttp, я пришел с этим очень простым кодом, который делает трюк. Скажем, вы хотите отправить серийный номер для проверки непосредственно перед началом фактической установки. В разделе кода поставьте:
procedure CurStepChanged(CurStep: TSetupStep);
var
WinHttpReq: Variant;
begin
if CurStep = ssInstall then
begin
if AutoCheckRadioButton.Checked = True then
begin
WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
WinHttpReq.Open('POST', '<your_web_server>', false);
WinHttpReq.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
WinHttpReq.Send('<your_data>');
// WinHttpReq.ResponseText will hold the server response
end;
end;
end;
Метод Open
принимает в качестве аргумента метод HTTP, URL-адрес и должен ли выполнять запрос асинхронного запроса, и нам кажется, что нам нужно добавить SetRequestHeader
, чтобы установить заголовок Content-Type
на application/x-www-form-urlencoded
.
WinHttpReq.Status
будет содержать код ответа, поэтому для проверки успешного ответа сервера:
if WinHttpReq.Status <> 200 then
begin
MsgBox('ERROR', mbError, MB_OK);
end
else
begin
MsgBox('SUCCESS', mbInformation, MB_OK);
end;
http://msdn.microsoft.com/en-us/library/aa384106.aspx перечисляет все методы и свойства объекта WinHttpRequest
.
Кроме того, чтобы избежать ошибок во время выполнения (может случиться, если хост недостижим), рекомендуется окружить код кодом try/except
.