AutoIt HttpSetProxy: đặt proxy cho InetGet và InetRead
AutoIt HttpSetProxy là hàm đặt proxy cho các hàm truy cập HTTP của AutoIt như InetGet, InetRead và InetGetSize. Hàm chỉ tác động lên chính script AutoIt, không đổi proxy của Windows hay của ứng dụng khác. ProxyVN đọc tài liệu hàm, mô phỏng lớp WinINet bên dưới bằng proxy tự dựng có nhật ký và đối chứng với một chương trình ngoài để chứng minh phạm vi đó.
AutoIt HttpSetProxy là gì và tác động tới đâu
Hàm của AutoIt, không phải của Windows
AutoIt là ngôn ngữ kịch bản cho Windows, hay dùng để tự động hóa thao tác giao diện và tác vụ hệ thống. Khi script cần tải tệp hay đọc trang web, AutoIt có nhóm hàm Inet. HttpSetProxy đặt proxy mà nhóm hàm này dùng. Theo tài liệu hàm HttpSetProxy, các hàm liên quan là FtpSetProxy, InetGet, InetGetSize và InetRead.
Brief của bài ghi rõ: tên đúng của hàm là HttpSetProxy. Một số bài trên mạng nhắc tới InetSetProxy, nhưng tài liệu chính thức không có hàm này. Gõ sai tên, script báo lỗi hàm không tồn tại ngay khi chạy.
HttpSetProxy chỉ đổi proxy cho các hàm HTTP của chính tiến trình AutoIt. Trình duyệt, ứng dụng khác và cả chương trình mà script gọi bằng Run đều không bị ảnh hưởng.
Ranh giới với các bài proxy Windows
Bài cài đặt proxy cho Windows 10 và bài cài proxy trên Windows 11 nói về proxy của hệ thống. Bài PowerShell proxy nói về proxy cho lệnh PowerShell. Bài này không dạy đổi proxy hệ thống, chỉ nói về HttpSetProxy trong script AutoIt và phạm vi thật của nó.
Phạm vi kiểm thử
Máy lab không cài AutoIt, vì cài đặt cần chạy bộ cài tải về. Thay vào đó, mình gọi thẳng thư viện WinINet của Windows bằng Python ctypes với cùng các chế độ mà HttpSetProxy mô tả: dùng cài đặt hệ thống, đi thẳng, và proxy chỉ định. Theo hiểu biết của mình, hàm Inet của AutoIt dựa trên WinINet, nhưng tài liệu hàm không nói rõ điều này, nên kết quả là mô phỏng chứ không phải chạy AutoIt thật.
Proxy thử nghe cổng 8942, cần tài khoản user1 với mật khẩu p@ss#2026, ghi nhật ký mọi request. Website thử tên shop.test chỉ phân giải được bên trong proxy. Mình không sửa cài đặt proxy nào của Windows trong suốt lab. Trước khi thử, giá trị ProxyEnable trong khóa Internet Settings của người dùng là 0, sau khi thử vẫn là 0.
Ba chế độ của AutoIt HttpSetProxy

Ba chế độ HttpSetProxy
Cú pháp và hằng số
Tài liệu ghi cú pháp HttpSetProxy với tham số mode, chuỗi proxy dạng proxy:port, tên người dùng và mật khẩu tùy chọn. Có ba chế độ, hằng số định nghĩa trong AutoItConstants.au3:
- $PROXY_IE bằng 0: mặc định, dùng cài đặt proxy hiện tại của Internet Explorer, tức cài đặt proxy người dùng của Windows.
- $PROXY_NONE bằng 1: không dùng proxy, đi thẳng.
- $PROXY_SPECIFIED bằng 2: dùng proxy chỉ định trong tham số thứ hai.
Hàm không trả giá trị. Muốn biết proxy có tác dụng hay không, phải kiểm bằng kết quả request, như phần lab bên dưới. Gọi sai chế độ hay sai chuỗi proxy cũng không báo lỗi ngay, lỗi chỉ lộ ra ở lần InetGet hoặc InetRead đầu tiên.
Ví dụ từ tài liệu
Tài liệu đưa ba ví dụ ngắn cho ba chế độ. Đoạn dưới viết lại theo cùng cú pháp, thêm tài khoản cho chế độ 2.
#include <AutoItConstants.au3>
#include <InetConstants.au3>
; Di thang, khong proxy
HttpSetProxy($PROXY_NONE)
; Dung cai dat proxy cua he thong
HttpSetProxy($PROXY_IE)
; Dung proxy chi dinh co tai khoan
HttpSetProxy($PROXY_SPECIFIED, "203.0.113.10:8080", EnvGet("PROXY_USER"), EnvGet("PROXY_PASS"))
Local $sData = InetRead("http://httpbin.org/ip", $INET_FORCERELOAD)
ConsoleWrite(BinaryToString($sData) & @CRLF)
Tên và mật khẩu là hai tham số riêng, không nằm trong chuỗi proxy, nên không cần mã hóa phần trăm cho ký tự đặc biệt. Đọc tài khoản từ biến môi trường bằng EnvGet thay vì ghi cứng trong script.
Lưu ý trong phần ghi chú
Tài liệu có một ghi chú ngắn: chỉ hỗ trợ proxy kiểu CERN, tức proxy HTTP thông thường. Không có SOCKS. Với gói proxy chỉ mở cổng SOCKS5, cần cổng HTTP của nhà cung cấp hoặc một proxy HTTP trung gian. Bài proxy HTTP và SOCKS5 giải thích khác biệt.
Ghi chú cũng nói khi dùng chế độ 0, có thể truyền tên và mật khẩu, chúng sẽ dùng với proxy cấu hình trong Internet Explorer. Nghĩa là tài khoản có thể đi kèm cả proxy của hệ thống, không chỉ proxy chỉ định.
Mô phỏng AutoIt HttpSetProxy bằng WinINet
Ánh xạ chế độ sang WinINet
Theo tài liệu InternetOpenW của WinINet, WinINet có ba kiểu mở phiên tương ứng ba chế độ của HttpSetProxy. INTERNET_OPEN_TYPE_PRECONFIG bằng 0 dùng cài đặt của hệ thống. INTERNET_OPEN_TYPE_DIRECT bằng 1 đi thẳng. INTERNET_OPEN_TYPE_PROXY bằng 3 dùng chuỗi proxy truyền vào. Tài khoản proxy đặt bằng hai tùy chọn INTERNET_OPTION_PROXY_USERNAME và INTERNET_OPTION_PROXY_PASSWORD.
Mình viết script Python gọi InternetOpenW với từng kiểu, rồi tải trang shop.test và example.com. Chuỗi proxy dạng http=127.0.0.1:8942 https=127.0.0.1:8942 cho cả hai giao thức.
Kết quả với InternetOpenUrl
Với kiểu đi thẳng, WinINet báo lỗi 12007, tức không phân giải được tên. Với kiểu dùng cài đặt hệ thống, cũng lỗi 12007, vì máy lab không bật proxy hệ thống. Với proxy không mở cổng, lỗi 12029, tức không kết nối được.
Với proxy chỉ định và tài khoản đặt trên handle phiên trả về từ InternetOpenW, rồi tải bằng InternetOpenUrlW, kết quả là HTTP 407 kể cả với tài khoản đúng. Nhật ký proxy ghi request không có tài khoản. Nghĩa là đặt tài khoản ở handle phiên rồi dùng InternetOpenUrl không làm WinINet gửi tài khoản.
Kết quả với HttpOpenRequest
Đổi sang luồng InternetConnect, HttpOpenRequest, HttpSendRequest và đặt tài khoản trên handle kết nối hoặc handle request, kết quả khác hẳn. Với URL http, proxy ghi một request không tài khoản bị trả 407, rồi một request có tài khoản user1, xác thực đạt, script nhận HTTP 200. WinINet tự xử lý thử thách 407 bên trong, không cần gửi lại bằng tay.
Với https://example.com, nhật ký ghi CONNECT example.com:443 có tài khoản, script nhận 200. Với mật khẩu sai, cả lần gửi đầu và lần gửi lại đều 407. Bảng dưới gom kết quả.
Ca mô phỏng WinINet |
Kết quả |
Nhật ký proxy |
|---|---|---|
Đi thẳng |
Lỗi 12007 |
Không có |
Cài đặt hệ thống, máy không bật proxy |
Lỗi 12007 |
Không có |
Proxy chỉ định, tài khoản ở handle phiên, InternetOpenUrl |
HTTP 407 |
Request không tài khoản |
Proxy chỉ định, tài khoản ở handle request, URL http |
HTTP 200 |
407 rồi có tài khoản |
Như trên, URL https |
HTTP 200 |
CONNECT có tài khoản |
Tài khoản ở handle kết nối |
HTTP 200 |
Có tài khoản |
Mật khẩu sai |
HTTP 407 hai lần |
Tài khoản bị từ chối |
Proxy không mở cổng |
Lỗi 12029 |
Không có |
Bảng cho thấy cùng một thư viện WinINet, cách đặt tài khoản quyết định thành bại. AutoIt dùng cách nào bên trong thì phải kiểm bằng script AutoIt thật với proxy có nhật ký, như phần sau hướng dẫn.
Với AutoIt HttpSetProxy, hàm không trả lỗi. Chỉ nhật ký proxy và kết quả InetRead cho biết proxy và tài khoản có tác dụng hay không.
Chứng minh AutoIt HttpSetProxy không ép mọi ứng dụng

Chỉ script đi qua proxy
Đối chứng với chương trình ngoài
Brief yêu cầu đối chứng với chương trình ngoài. Ngay sau các ca qua proxy, mình chạy curl.exe có sẵn trong Windows tới cùng URL shop.test, không đặt proxy. Kết quả là Could not resolve host: shop.test, không có dòng nào trong nhật ký proxy. Chương trình ngoài vẫn đi thẳng.
Lý do đơn giản: cấu hình proxy truyền vào WinINet bằng InternetOpen chỉ thuộc về handle đó trong tiến trình đó. Nó không ghi vào sổ đăng ký, không đổi cài đặt người dùng. HttpSetProxy của AutoIt, theo mô tả, cũng chỉ thay đổi cách hàm Inet của script kết nối.
Chương trình gọi bằng Run
Script AutoIt hay gọi chương trình khác bằng Run hoặc RunWait, ví dụ một công cụ tải tệp. Chương trình con chạy trong tiến trình riêng, không thừa hưởng cấu hình HttpSetProxy. Nếu chương trình con cần proxy, truyền qua tham số dòng lệnh hoặc biến môi trường mà chương trình đó hiểu.
Ví dụ với curl, truyền -x và -U. Với chương trình đọc biến HTTP_PROXY, đặt biến bằng EnvSet trước khi Run. Biến đặt bằng EnvSet có hiệu lực cho tiến trình con được tạo sau đó, không đổi môi trường của hệ thống.
Không cần hoàn nguyên cấu hình hệ thống
Vì không có thao tác nào ghi vào cài đặt proxy của Windows, không có gì phải hoàn nguyên sau khi thử. Mình kiểm lại ProxyEnable trong khóa HKCU Internet Settings sau lab, giá trị vẫn là 0. Đây là ưu điểm của HttpSetProxy so với các script tự sửa sổ đăng ký để bật proxy hệ thống.
Có những script trên mạng đổi khóa ProxyServer và ProxyEnable của Windows để mọi ứng dụng đi proxy. Cách đó ảnh hưởng toàn bộ người dùng, dễ quên tắt, và có thể làm hỏng kết nối của ứng dụng khác. Nếu chỉ cần script tải dữ liệu qua proxy, HttpSetProxy là cách có phạm vi nhỏ và an toàn hơn. Bài cách tắt proxy trên Windows hướng dẫn gỡ khi lỡ bật proxy hệ thống.
Script tải tệp lab với AutoIt HttpSetProxy
Mẫu script có kiểm lỗi
Brief yêu cầu script tải tệp lab. Đoạn dưới là ví dụ triển khai cho AutoIt, mình chưa chạy được vì không cài AutoIt. Script đặt proxy chỉ định, tải tệp bằng InetGet ở chế độ chờ, kiểm số byte và mã lỗi, rồi đặt lại về đi thẳng.
#include <AutoItConstants.au3>
#include <InetConstants.au3>
Local $sProxy = EnvGet("PROXY_HOSTPORT")
HttpSetProxy($PROXY_SPECIFIED, $sProxy, EnvGet("PROXY_USER"), EnvGet("PROXY_PASS"))
Local $sUrl = "http://shop.test:8941/autoit-file"
Local $sOut = @TempDir & "\autoit-lab.json"
Local $iBytes = InetGet($sUrl, $sOut, $INET_FORCERELOAD, $INET_DOWNLOADWAIT)
If @error Then
ConsoleWrite("Tai that bai, @error=" & @error & @CRLF)
Else
ConsoleWrite("Da tai " & $iBytes & " byte vao " & $sOut & @CRLF)
EndIf
HttpSetProxy($PROXY_NONE)
$INET_FORCERELOAD buộc tải mới thay vì lấy từ bộ nhớ đệm, quan trọng khi kiểm proxy vì bản đệm có thể làm tưởng request đã qua proxy. $INET_DOWNLOADWAIT chờ tải xong rồi mới chạy tiếp.
Đọc lỗi trong AutoIt
Hàm InetGet đặt @error khi thất bại. Tài liệu AutoIt không ánh xạ @error ra mã HTTP cụ thể. Khi proxy trả 407, InetGet có thể thất bại mà không nói rõ là lỗi xác thực. Mở nhật ký proxy là cách duy nhất để biết proxy đã nhận request nào, có tài khoản không.
Với InetRead, hàm trả dữ liệu nhị phân hoặc chuỗi rỗng khi lỗi. Nếu trang thật sự trả nội dung lỗi của proxy, dữ liệu có thể là trang HTML 407 của proxy. Kiểm nội dung trả về trước khi xử lý tiếp.
Đặt lại sau khi tải
Dòng HttpSetProxy($PROXY_NONE) cuối script đưa các hàm Inet về đi thẳng. Trong script dài, có đoạn cần proxy, có đoạn không, đặt lại ngay sau đoạn cần proxy giúp tránh lỗi request nội bộ bị đẩy ra proxy bên ngoài. Vì cấu hình chỉ trong tiến trình, khi script kết thúc mọi thứ tự hết hiệu lực.
Kiểm AutoIt HttpSetProxy bằng proxy có nhật ký
Dựng proxy kiểm thử
Cách chắc nhất để biết HttpSetProxy có tác dụng là chạy script qua một proxy ghi nhật ký. Proxy thử trong lab là một chương trình Python nhỏ, có thể thay bằng mitmproxy hay Squid. Yêu cầu là ghi được đích, có tài khoản hay không, xác thực đạt hay không.
Bộ ca kiểm cho script AutoIt thật
- $PROXY_NONE: tới tên chỉ có trong proxy phải thất bại, nhật ký trống.
- $PROXY_SPECIFIED không tài khoản: nhật ký có request, proxy trả 407.
- $PROXY_SPECIFIED có tài khoản: nhật ký có tài khoản, tải thành công.
- URL https: nhật ký có CONNECT có tài khoản.
- Mật khẩu sai: tải thất bại, nhật ký ghi tài khoản bị từ chối.
- $PROXY_IE khi hệ thống không bật proxy: đi thẳng.
- curl.exe chạy cùng lúc: không có dòng nào trong nhật ký.
Ca thứ ba và thứ tư trả lời câu hỏi mô phỏng chưa trả lời được: AutoIt đặt tài khoản theo cách nào trong WinINet. Ghi kết quả lại cho cả nhóm, kèm số phiên bản AutoIt và bản Windows. Có thể ca có tài khoản thất bại với 407 dù mật khẩu đúng, giống ca tài khoản đặt ở handle phiên trong mô phỏng. Khi đó, chuyển sang proxy xác thực theo IP, hoặc gọi WinINet trực tiếp với tài khoản đặt trên handle request như lab đã làm. Đừng cố thử lại nhiều lần với cùng cấu hình, vì một số nhà cung cấp tạm khóa tài khoản sau nhiều lần xác thực thất bại liên tiếp.
Bộ nhớ đệm của WinINet

Bộ nhớ đệm làm nhật ký trống
WinINet có bộ nhớ đệm dùng chung với Internet Explorer cũ. Không có cờ buộc tải lại, một trang đã tải trước có thể được trả từ đệm mà không đi qua proxy, nhật ký trống nhưng script vẫn có dữ liệu. Trong lab, mình đặt cờ không ghi đệm và tải lại. Trong AutoIt, dùng $INET_FORCERELOAD cho mọi lần kiểm.
AutoIt HttpSetProxy với proxy của hệ thống
$PROXY_IE đọc cài đặt nào
Chế độ $PROXY_IE dùng cài đặt proxy mà Internet Explorer từng quản lý, nay là phần cài đặt proxy của người dùng trong Windows. Cài đặt này nằm trong hồ sơ của người dùng đang chạy script, gồm proxy thủ công, tệp cấu hình tự động PAC và tự dò WPAD. Trong mô phỏng, kiểu INTERNET_OPEN_TYPE_PRECONFIG tương ứng đã đi thẳng vì máy lab tắt proxy hệ thống.
Hệ quả là cùng một script, chạy trên máy có proxy công ty thì đi proxy, chạy trên máy cá nhân thì đi thẳng. Với script cần hành vi giống nhau ở mọi nơi, dùng $PROXY_SPECIFIED với proxy rõ ràng thay vì dựa vào cài đặt của từng máy.
Tệp PAC và tự dò
Nếu công ty dùng tệp PAC, chế độ $PROXY_IE để WinINet tự đọc tệp PAC và chọn proxy theo URL. Đây là lợi thế: script không phải biết danh sách proxy của công ty. Nhưng khi tệp PAC chọn đi thẳng cho một tên miền, script cũng đi thẳng, dù người viết tưởng mọi request đều qua proxy.
Tự dò WPAD có thể làm request đầu tiên chậm vài giây trong lúc Windows tìm tệp cấu hình. Script tải nhiều tệp nhỏ sẽ thấy chậm ở lần đầu. Với tác vụ cần nhanh và ổn định, chỉ định proxy rõ ràng tránh được bước dò này.
AutoIt HttpSetProxy trong tác vụ lập lịch
Tài khoản chạy script quyết định cài đặt
Script AutoIt hay được chạy bằng Task Scheduler vào ban đêm. Tác vụ có thể chạy dưới tài khoản khác với người viết script, ví dụ tài khoản dịch vụ hay SYSTEM. Cài đặt proxy người dùng của tài khoản đó thường khác hoặc trống. Script dùng $PROXY_IE chạy tốt khi người viết thử tay, rồi đi thẳng hoặc lỗi khi chạy theo lịch.
Biến môi trường cũng vậy. Biến PROXY_USER đặt trong phiên của người viết không có trong môi trường của tài khoản dịch vụ. Đặt biến ở mức hệ thống hoặc đọc tài khoản từ tệp cấu hình mà tài khoản dịch vụ đọc được.
Kiểm bằng chính tài khoản chạy lịch
Trước khi giao tác vụ chạy theo lịch, chạy script một lần bằng đúng tài khoản sẽ chạy, qua proxy có nhật ký. Ghi kết quả tải và dòng nhật ký proxy. Nếu nhật ký trống, script đang đi thẳng hoặc bị chặn trước khi tới proxy. Cách này tránh được việc phát hiện lỗi vào sáng hôm sau khi báo cáo không có dữ liệu.
Tải tệp lớn với AutoIt HttpSetProxy
Chế độ nền và theo dõi tiến độ
InetGet có chế độ chạy nền, trả về một handle để theo dõi bằng InetGetInfo. Với tệp lớn qua proxy chậm, chạy nền giúp script làm việc khác hoặc hiện tiến độ thay vì đứng yên. Mình chưa thử chế độ này trong lab, mô tả theo tài liệu hàm.
Theo dõi số byte đã nhận theo thời gian giúp phát hiện proxy treo: nếu số byte không tăng trong một khoảng dài, hủy tải và thử lại hoặc báo lỗi. HttpSetProxy không có tham số thời gian chờ, nên kiểm soát thời gian phải làm ở tầng script.
Kiểm tệp sau khi tải
Sau khi tải, kiểm kích thước tệp và nếu có, giá trị băm do nguồn cung cấp. Proxy hoặc trang lỗi có thể trả một trang HTML nhỏ thay vì tệp thật, InetGet vẫn ghi ra đĩa. Kiểm vài byte đầu của tệp, ví dụ chữ ký của tệp zip hay pdf, để chắc đúng loại tệp trước khi xử lý tiếp. Một tệp vài trăm byte trong khi mong đợi vài megabyte gần như luôn là trang lỗi.
Khi AutoIt HttpSetProxy chưa đủ: gọi WinINet trực tiếp
Khi HttpSetProxy chưa đủ
HttpSetProxy đơn giản nhưng ẩn chi tiết: không trả mã HTTP, không cho chọn kiểu xác thực, không đặt thời gian chờ. Khi cần những thứ đó, AutoIt có thể gọi thẳng WinINet bằng DllCall, theo đúng luồng InternetOpen, InternetConnect, HttpOpenRequest, HttpSendRequest mà lab đã chạy. Luồng này cho đọc mã trạng thái bằng HttpQueryInfo và đặt tài khoản trên handle request, cách đã cho kết quả 200 trong lab.
Cách này dài dòng hơn nhiều và dễ rò handle nếu quên InternetCloseHandle. Chỉ dùng khi thật cần, và gói thành một hàm riêng dùng chung cho cả dự án.
WinHTTP thay cho WinINet
Với script chạy như dịch vụ, Microsoft khuyên dùng WinHTTP thay vì WinINet, vì WinINet thiết kế cho ứng dụng tương tác của người dùng. WinHTTP có cấu hình proxy riêng, xem bằng lệnh netsh winhttp show proxy. AutoIt có thư viện người dùng bọc WinHTTP. Khi chuyển sang WinHTTP, HttpSetProxy không còn tác dụng, proxy phải đặt theo API của WinHTTP.
Lỗi hay gặp với AutoIt HttpSetProxy
Bảng tra
Hiện tượng |
Thường do |
Xử lý |
|---|---|---|
Hàm không tồn tại |
Gõ InetSetProxy |
Dùng HttpSetProxy |
Ứng dụng khác không đi proxy |
HttpSetProxy chỉ cho script |
Cấu hình proxy riêng cho ứng dụng đó |
Chương trình gọi bằng Run đi thẳng |
Tiến trình con không thừa hưởng |
Truyền tham số hoặc EnvSet |
InetGet thất bại không rõ lý do |
Proxy trả 407 |
Kiểm tài khoản, xem nhật ký proxy |
Có dữ liệu nhưng nhật ký trống |
Dữ liệu từ bộ nhớ đệm |
$INET_FORCERELOAD |
Proxy SOCKS không chạy |
Chỉ hỗ trợ proxy HTTP |
Dùng cổng HTTP |
$PROXY_IE đi thẳng |
Hệ thống không bật proxy |
Dùng $PROXY_SPECIFIED |
Khi gặp lỗi 407 cụ thể, bài sửa lỗi 407 Proxy Authentication Required liệt kê nguyên nhân phía nhà cung cấp.
Lỗi WinINet thường gặp
Nếu dùng WinINet trực tiếp từ AutoIt qua DllCall, các mã lỗi hay gặp theo danh sách lỗi WinINet là 12007 cho không phân giải được tên, 12029 cho không kết nối được, 12002 cho quá hạn. Hai mã đầu đã xuất hiện trong lab. Mã 12007 khi đi qua proxy thường do chuỗi proxy sai, khiến WinINet đi thẳng.
Bảo trì script dùng AutoIt HttpSetProxy
Ghi chú trong script
Đặt một khối chú thích ở đầu script nói rõ script dùng chế độ proxy nào và đọc tài khoản từ biến nào. Ghi thêm rằng script cần proxy HTTP chứ không phải SOCKS, và đã được kiểm với proxy có nhật ký vào ngày nào. Người sửa script sau này nhờ đó không vô tình đổi sang $PROXY_IE hay quên đặt biến môi trường khi chuyển máy.
Khi nhà cung cấp đổi địa chỉ proxy hay đổi mật khẩu, chỉ cần sửa biến môi trường, không sửa script. Đó là lý do không nên ghi cứng địa chỉ proxy trong script, kể cả phần không bí mật.
Kiểm lại sau khi nâng cấp Windows
Bản cập nhật lớn của Windows có thể đổi cách WinINet xử lý proxy, PAC hay xác thực. Sau mỗi bản cập nhật lớn, chạy lại bộ ca kiểm với proxy có nhật ký. Ca quan trọng nhất là ca có tài khoản, vì cách WinINet gửi tài khoản phụ thuộc chi tiết cài đặt mà người dùng không thấy.
Ghi kết quả kiểm vào cùng chỗ với ghi chú của script. Khi một ngày script bỗng lỗi 407, so với kết quả lần kiểm trước để biết thứ gì đã đổi: mật khẩu, proxy hay Windows.
Đưa AutoIt HttpSetProxy vào script thật
Giữ bí mật
Không ghi mật khẩu proxy vào script .au3 hay vào tệp đã biên dịch. Tệp exe biên dịch từ AutoIt có thể bị giải nén để đọc mã nguồn. Đọc tài khoản từ biến môi trường hoặc từ tệp cấu hình có quyền truy cập hạn chế. Với máy dùng chung, mỗi người dùng một biến môi trường riêng.
Chọn loại proxy
Script AutoIt thường chạy trên máy văn phòng hay máy ảo tự động hóa, tải tệp báo cáo, gọi API nội bộ hay đối tác. Với API đối tác yêu cầu IP cố định, proxy tĩnh phù hợp. Vì HttpSetProxy chỉ hỗ trợ proxy HTTP, chọn gói có cổng HTTP và xác thực bằng tài khoản hoặc theo IP.
ProxyVN có proxy dân cư tĩnh, datacenter và proxy xoay, hỗ trợ HTTP và SOCKS5, cấp tài khoản user và mật khẩu. Nếu script cần proxy HTTP có IP cố định, anh em có thể mua proxy Việt Nam tại trang chủ ProxyVN rồi chạy bộ ca kiểm ở trên.
Khi nào không dùng HttpSetProxy
Nếu script điều khiển trình duyệt bằng giao diện, trình duyệt có proxy riêng của nó, HttpSetProxy không liên quan. Có lúc script cần SOCKS, cần proxy khác nhau cho từng request song song, hay cần xử lý chi tiết mã HTTP. Khi đó, cân nhắc gọi một công cụ chuyên dụng như curl qua Run với tham số proxy, hoặc dùng ngôn ngữ khác cho phần mạng.
Câu hỏi thường gặp về AutoIt HttpSetProxy
HttpSetProxy có đổi proxy của Windows không. Không. Nó chỉ áp cho các hàm Inet của script AutoIt.
Có hàm InetSetProxy không. Tài liệu chính thức không có. Tên đúng là HttpSetProxy.
Mật khẩu có ký tự đặc biệt có cần mã hóa không. Không. Tên và mật khẩu là tham số riêng.
Có dùng được SOCKS5 không. Tài liệu ghi chỉ hỗ trợ proxy kiểu CERN, tức proxy HTTP.
Vì sao InetGet có dữ liệu mà proxy không ghi gì. Dữ liệu lấy từ bộ nhớ đệm. Dùng $INET_FORCERELOAD.
Chương trình gọi bằng Run có đi proxy không. Không tự động. Truyền proxy cho chương trình đó theo cách nó hỗ trợ.
Script chạy theo lịch đi thẳng dù thử tay qua proxy. Tác vụ chạy dưới tài khoản khác, cài đặt proxy và biến môi trường khác. Dùng $PROXY_SPECIFIED và đặt biến ở mức hệ thống hoặc tệp cấu hình.
Có đặt thời gian chờ cho InetGet qua proxy được không. HttpSetProxy không có tham số thời gian chờ. Dùng chế độ nền của InetGet và tự hủy khi quá lâu, hoặc gọi WinINet trực tiếp.
Dùng tệp PAC của công ty được không. Có, với $PROXY_IE nếu tệp PAC đã cấu hình trong Windows cho người dùng chạy script.
Checklist AutoIt HttpSetProxy

Checklist AutoIt HttpSetProxy
Trước khi dùng
- Gọi đúng tên HttpSetProxy.
- Chọn chế độ rõ ràng, không dựa vào mặc định $PROXY_IE.
- Proxy HTTP, không SOCKS.
- Tài khoản từ biến môi trường.
- $INET_FORCERELOAD khi kiểm.
- Đặt lại $PROXY_NONE sau đoạn cần proxy.
- Kiểm bằng proxy có nhật ký và đối chứng chương trình ngoài.
Giới hạn của bài
Máy lab không cài AutoIt. Bài theo tài liệu hàm HttpSetProxy, phần lab mô phỏng các chế độ bằng WinINet qua Python ctypes trên Windows 10 với proxy tự dựng, đối chứng bằng curl.exe. Chưa xác minh AutoIt đặt tài khoản ở handle nào trong WinINet, chưa thử FtpSetProxy.
AutoIt HttpSetProxy và những điều cần nhớ
AutoIt HttpSetProxy đặt proxy cho InetGet, InetRead của chính script, với ba chế độ hệ thống, đi thẳng và chỉ định. Không đổi proxy của Windows, không áp cho chương trình khác, chỉ hỗ trợ proxy HTTP. Kiểm bằng nhật ký proxy. Cần proxy HTTP ổn định cho AutoIt HttpSetProxy, liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam.