2011-02-02 51 views
11

Tôi muốn gửi một số thông tin được thu thập từ người dùng trong khi cài đặt Inno setup đến máy chủ của chúng tôi qua POST.Yêu cầu POST HTTP trong Tập lệnh Thiết lập Inno

Giải pháp rõ ràng là bao gồm tệp .exe mà thiết lập sẽ trích xuất vào vị trí tạm thời và khởi chạy với thông số. Tuy nhiên, tôi tự hỏi - có cách nào dễ dàng hơn/tốt hơn không?

+0

Trong cách tiếp cận dự án của chúng tôi với tùy chỉnh .exe hoạt động tốt. – Sasha

Trả lời

18

Dựa trên lời khuyên của jsobo về việc sử dụng thư viện WinHttp, tôi đi kèm với mã này đơn giản là rất. Giả sử bạn muốn gửi số sê-ri để xác minh ngay trước khi quá trình cài đặt thực sự bắt đầu. Trong phần mã, đưa:

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; 

Phương pháp Open mất như các đối số phương thức HTTP, URL và xem có nên làm theo yêu cầu async và nó có vẻ như chúng ta cần thêm SetRequestHeader để thiết lập các Content-Type tiêu đề để application/x-www-form-urlencoded .

WinHttpReq.Status sẽ giữ mã phản hồi, vì vậy để kiểm tra xem máy chủ trở thành công:

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 liệt kê tất cả các phương pháp và các thuộc tính của đối tượng WinHttpRequest.

Ngoài ra, để tránh lỗi thời gian chạy (có thể xảy ra nếu máy chủ không thể truy cập được), bạn nên bao quanh mã với mã try/except.

+0

Làm cách nào để xử lý nếu internet đang ngoại tuyến (hoặc máy chủ)? WinHttpReq.Send throiws và nó không thể được bắt trong ngoại trừ/cuối cùng = ( – DuckQueen

3

Bạn luôn có thể có của bạn sử dụng trình cài đặt curl để làm cho bài http ...

bạn có thể viết một kịch bản pascal ngay trong InnoSetup để làm các cuộc gọi sử dụng các winhttp library

Hoặc bạn chỉ có thể viết một VBScript và thực hiện việc với cơ cscript để làm cuộc gọi http cùng thông qua thư viện WinHTTP.

Điều đó sẽ chỉ cho bạn ít nhất 3 tùy chọn khác nhau để thực hiện những gì bạn cần.

Tôi cho rằng việc đưa exe vào đó sẽ dễ bị lỗi nhất nhưng việc sử dụng thư viện winhttp với kịch bản lệnh pascal (được sử dụng bởi innosetup) sẽ đơn giản nhất.

Các vấn đề liên quan