WeProxy

Hướng dẫn

Định dạng proxy: ip:port:user:pass, URL và cách viết SOCKS5

đọc 11 phút

Định dạng proxy là thứ tự viết host, port, tên đăng nhập, mật khẩu và giao thức trên một dòng. Bài viết trình bày ip:port:user:pass, user:pass@host:port, URL http:// và socks5h://, công cụ nào cần dạng nào, cách viết ký tự đặc biệt và IPv6, chuyển đổi hàng loạt và các lỗi do định dạng.

Tóm tắt nhanh

  • Định dạng proxy là cách viết cùng năm thông tin (host, port, tên đăng nhập, mật khẩu, giao thức) trên một dòng theo thứ tự và ký tự phân tách nhất định; các dạng phổ biến nhất là host:port:user:pass, user:pass@host:port và URL http://user:pass@host:port.
  • Scheme trong dạng URL mô tả giao thức của proxy server: khi vào site HTTPS qua HTTP proxy, địa chỉ vẫn viết bằng http://; https:// nghĩa là nói chuyện TLS với chính proxy.
  • socks5:// phân giải tên miền trên máy cục bộ, còn socks5h:// phân giải ở phía proxy; nên dùng socks5h để truy vấn DNS không đi ra từ mạng nội bộ.
  • Trong dạng URL, các ký tự @, :, /, #, ? và % trong mật khẩu phải được percent-encode (@ → %40); host IPv6 được đặt trong ngoặc vuông: http://USER:PASSWORD@[2001:db8::10]:8989.
  • Playwright, Puppeteer và Chrome yêu cầu thông tin đăng nhập tách khỏi URL; màn hình Wi‑Fi của Windows và Android chỉ nhận host và port; cURL và Python dùng URL đầy đủ có scheme.

Định dạng proxy là thứ tự viết host, port, tên đăng nhập, mật khẩu và giao thức của một proxy trên cùng một dòng. Ba dạng phổ biến nhất là host:port:user:pass (dạng danh sách trong bảng điều khiển), user:pass@host:port và http://user:pass@host:port (dạng URL); với SOCKS5 proxy, URL đó được viết với scheme socks5:// hoặc socks5h://.

Thông tin trong mọi dạng đều giống nhau, chỉ khác thứ tự và ký tự phân tách. Rắc rối bắt đầu khi mỗi chương trình chỉ chấp nhận một trong các dạng này: cURL và Python cần URL, trình duyệt antidetect nhận dòng bốn phần, còn Windows và Android chỉ có ô host và port. Các ví dụ bên dưới dùng địa chỉ gateway của WeProxy là gw.weproxy.com.tr:8989; USER và PASSWORD là thông tin đăng nhập trong bảng điều khiển của bạn.

Định dạng proxy là gì và gồm những phần nào?

Một kết nối proxy có tối đa năm thông tin. Host là tên miền hoặc địa chỉ IP của proxy server (gw.weproxy.com.tr, 203.0.113.10). Port là số cổng mà server chờ kết nối (8989). Tên đăng nhập và mật khẩu chỉ cần khi proxy xác thực bằng cách này. Giao thức quyết định client nói chuyện với proxy ra sao (http, socks5).

Host và port bắt buộc trong mọi dạng. Nếu không có thông tin đăng nhập, dòng chỉ còn host:port; khi đó proxy cấp quyền theo địa chỉ IP mà kết nối đi tới (whitelist IP). Phần lớn định dạng không ghi giao thức, và client dùng giá trị mặc định của mình. Nhiều công cụ đọc một dòng không có scheme thành HTTP proxy; nếu bạn đưa SOCKS5 proxy mà không có scheme, kết nối vẫn được thiết lập nhưng request đầu tiên sẽ báo lỗi không khớp giao thức.

Khác biệt giữa HTTP và SOCKS5, cũng như khi nào nên chọn loại nào, được giải thích trong bài HTTP vs SOCKS5. Dù chọn giao thức nào, bạn vẫn phải báo cho chương trình biết, bằng scheme hoặc bằng một menu chọn riêng.

Đọc định dạng ip:port:user:pass như thế nào?

ip:port:user:pass (hay host:port:user:pass) là dạng hay gặp nhất trong các danh sách proxy. Bốn trường được ngăn cách bằng dấu hai chấm:

gw.weproxy.com.tr:8989:USER:PASSWORD
203.0.113.10:8989:USER:PASSWORD

Dạng này dễ dán vào bảng tính, file văn bản và ô nhập hàng loạt của trình duyệt antidetect. Điểm yếu của nó là chính ký tự phân tách cũng có thể xuất hiện trong dữ liệu. Nếu mật khẩu chứa :, dòng bị tách thành năm phần, và phần nào thuộc trường nào sẽ tùy vào giả định của chương trình. Địa chỉ IPv6 vốn đã viết bằng :, nên ở dạng này chỉ đọc được khi đặt trong ngoặc vuông ([2001:db8::10]:8989:USER:PASSWORD).

Một số nhà cung cấp đưa bốn trường này theo thứ tự khác: user:pass:host:port hoặc host:port@user:pass. Chương trình không đoán thứ tự từ danh sách của bạn. Nó coi trường thứ hai là port nếu đó là một con số; khi mật khẩu chỉ gồm chữ số, cách đọc sai này đi qua mà không báo lỗi và kết quả là 407. Hãy xác nhận thứ tự của danh sách bằng cách nhìn host và port ở dòng đầu tiên.

Định dạng URL: viết http://user:pass@host:port như thế nào?

Dạng URL dùng cấu trúc địa chỉ chung được định nghĩa trong RFC 3986:

scheme://tên_đăng_nhập:mật_khẩu@host:port
http://USER:[email protected]:8989

Scheme cho biết proxy server dùng giao thức nào; giao thức của website đích không liên quan tới nó. Nếu bạn truy cập một site HTTPS qua HTTP proxy, địa chỉ proxy vẫn bắt đầu bằng http://. Client gửi request CONNECT tới proxy và kết nối TLS được thiết lập bên trong tunnel này. Còn scheme https:// nghĩa là client sẽ nói chuyện TLS với chính proxy server; nếu proxy không hỗ trợ, kết nối đứt ngay ở bước bắt tay.

Dạng không có scheme user:pass@host:port cũng phổ biến. Đa số chương trình đọc nó thành HTTP proxy, nhưng không phải công cụ nào cũng chấp nhận. Các thư viện Python như requests và httpx cần URL đầy đủ có scheme. Ví dụ cho từng thư viện có trong bài dùng proxy trong Python.

Trong cURL, bạn đưa URL vào tham số -x. Nếu muốn tách thông tin đăng nhập khỏi địa chỉ, dùng -U:

curl -x "http://USER:[email protected]:8989" https://api.ipify.org
curl -x "http://gw.weproxy.com.tr:8989" -U "USER:PASSWORD" https://api.ipify.org

Theo tài liệu cURL, nếu giá trị -x không có scheme thì địa chỉ được coi là HTTP proxy, và nếu không ghi port thì mặc định là 1080. Hãy luôn ghi port rõ ràng; nếu không, request đi tới sai port và bạn nhận Connection refused.

Viết SOCKS5 proxy như thế nào? Khác biệt giữa socks5 và socks5h

URL của SOCKS5 proxy có cấu trúc giống HTTP, chỉ khác scheme:

socks5://USER:[email protected]:8989
socks5h://USER:[email protected]:8989

Hai scheme khác nhau ở chỗ tên miền được phân giải ở đâu. socks5:// phân giải tên miền đích trên máy của bạn rồi gửi địa chỉ IP cho proxy. socks5h:// chuyển nguyên tên miền cho proxy, và việc phân giải DNS diễn ra phía proxy. Cách thứ hai giữ cho truy vấn DNS không đi ra từ mạng nội bộ của bạn và để tên miền đích được phân giải theo quốc gia nơi đặt proxy. Chi tiết có trong hướng dẫn về rò rỉ DNS.

curl -x "socks5h://USER:[email protected]:8989" https://api.ipify.org

Ở SOCKS5, tên đăng nhập và mật khẩu được gửi qua một bước thương lượng con riêng (RFC 1929); HTTP proxy thì mang cùng thông tin đó trong header Proxy-Authorization. Cách viết định dạng ở hai giao thức vẫn như nhau. SOCKS4 không có trường mật khẩu, chỉ mang một user ID; viết một proxy có tên đăng nhập và mật khẩu bằng socks4:// sẽ làm mất bước xác thực.

Phần lớn sản phẩm WeProxy hỗ trợ cả HTTP lẫn SOCKS5. Endpoint của mobile proxy chỉ hỗ trợ HTTP; nếu viết sản phẩm này bằng socks5://, kết nối sẽ không thiết lập được. Giao thức được hỗ trợ ghi trong bảng thông số kỹ thuật trên trang sản phẩm.

So sánh các định dạng proxy

Định dạngVí dụThông tin giao thứcKý tự đặc biệtCách dùng thường gặp
host:portgw.weproxy.com.tr:8989KhôngKhông có vấn đềWhitelist IP, cài đặt proxy hệ thống
host:port:user:passgw.weproxy.com.tr:8989:USER:PASSWORDKhông: làm tách mật khẩuDanh sách trong bảng điều khiển, nhập hàng loạt vào trình duyệt antidetect
user:pass@host:portUSER:[email protected]:8989KhôngPhải mã hóa @ và :Một số công cụ bot và scraper
URL (http://)http://USER:[email protected]:8989CóPercent-encodingcURL, Python, Node.js, biến môi trường
URL (socks5h://)socks5h://USER:[email protected]:8989Có, DNS ở phía proxyPercent-encodingcURL, client SOCKS trong Python

Nếu bạn viết code, hãy lấy dạng URL làm chuẩn: nó mang thông tin giao thức, có quy tắc phân tích chuẩn, và vấn đề ký tự đặc biệt được giải quyết bằng percent-encoding. Khi chia sẻ danh sách hoặc thêm proxy hàng loạt vào trình duyệt antidetect, host:port:user:pass tiện hơn.

Công cụ nào cần định dạng proxy nào?

Công cụĐịnh dạng yêu cầuGhi chú
cURL-x scheme://user:pass@host:portCó thể đưa thông tin đăng nhập riêng bằng -U user:pass
Python (requests, httpx)URL đầy đủ có schemeSOCKS cần cài thêm gói
Biến môi trườngHTTPS_PROXY=http://user:pass@host:portVới HTTP, cURL chỉ đọc http_proxy viết thường
PlaywrightCác trường riêng server, username, passwordKhông ghi thông tin đăng nhập trong server
Puppeteer, Chrome--proxy-server=host:portThông tin đăng nhập đưa qua page.authenticate()
Trình duyệt antidetectCác trường riêng hoặc dán nhanhĐa số nhận cả host:port:user:pass và dạng URL
ProxifierCác trường riêng và chọn giao thứcChọn SOCKS Version 5 hoặc HTTPS
Windows, Android Wi‑FiChỉ host và portKhông có trường tên đăng nhập và mật khẩu

Việc tự động hóa trình duyệt yêu cầu thông tin đăng nhập tách khỏi URL là có chủ đích. Cờ --proxy-server của Chrome không chấp nhận phần user:pass@. Playwright thì nhận proxy qua một object:

const browser = await chromium.launch({
  proxy: {
    server: 'http://gw.weproxy.com.tr:8989',
    username: 'USER',
    password: 'PASSWORD',
  },
})

Theo tài liệu Playwright, giá trị host:port không có scheme được đọc thành HTTP proxy. Bản thân Chrome không hỗ trợ SOCKS5 proxy có tên đăng nhập và mật khẩu; khi tự động hóa với Chrome mà proxy cần xác thực, hãy dùng scheme HTTP. Cách thiết lập đầy đủ với page.authenticate() trong Puppeteer có trên trang tích hợp Puppeteer.

Màn hình cài đặt proxy toàn hệ thống của Windows và Android chỉ nhận host và port. Khi bạn nhập một proxy cần xác thực vào đây, có ứng dụng sẽ hỏi mật khẩu, có ứng dụng từ chối kết nối mà không hỏi. Hướng dẫn từng bước cho Windows và Android nằm trên trang tích hợp.

Viết mật khẩu có ký tự đặc biệt và địa chỉ IPv6 như thế nào?

Trong dạng URL, các ký tự @, :, /, #, ? và % mang nghĩa đặc biệt. Nếu mật khẩu chứa một trong số đó, bạn phải viết bằng percent-encoding:

Ký tựDạng đã mã hóa
@%40
:%3A
/%2F
#%23
?%3F
%%25

Ví dụ, nếu mật khẩu là p@ss:9 thì URL sẽ là http://USER:p%40ss%[email protected]:8989. Dấu @ chưa mã hóa khiến client hiểu phần còn lại của mật khẩu là tên host; kết quả là lỗi địa chỉ không phân giải được hoặc 407 Proxy Authentication Required. Thay vì mã hóa thủ công, hãy dùng hàm có sẵn của ngôn ngữ lập trình:

from urllib.parse import quote

password = quote("p@ss:9", safe="")  # p%40ss%3A9
proxy = f"http://USER:{password}@gw.weproxy.com.tr:8989"

Percent-encoding chỉ có tác dụng trong dạng URL. Nếu bạn viết %40 vào dòng host:port:user:pass, đa số chương trình sẽ gửi đúng các ký tự đó như một phần của mật khẩu. Với công cụ có trường tên đăng nhập và mật khẩu riêng (Playwright, Proxifier, trình duyệt antidetect), hãy luôn nhập mật khẩu nguyên dạng, không mã hóa.

Địa chỉ IPv6 trong URL được đặt trong ngoặc vuông, vì các dấu : của chính địa chỉ sẽ lẫn với dấu phân tách port:

http://USER:PASSWORD@[2001:db8::10]:8989

Nếu viết IPv6 không có ngoặc, client sẽ coi dấu hai chấm cuối cùng là dấu phân tách port. IPv6 proxy hoạt động trên những site nào được trình bày trong bài IPv4 vs IPv6.

Chuyển danh sách proxy từ định dạng này sang định dạng khác như thế nào?

Khi cần đổi danh sách host:port:user:pass lấy từ bảng điều khiển sang URL để dùng trong script, công cụ chuyển đổi định dạng proxy sẽ chuyển các dòng hàng loạt. Công cụ nhận bốn định dạng đầu vào (scheme://user:pass@host:port, user:pass@host:port, host:port:user:pass, host:port) và viết lại theo định dạng bạn chọn. Quá trình chuyển đổi diễn ra trong trình duyệt của bạn, danh sách không được gửi lên server.

Công cụ hoạt động theo các quy tắc sau:

  • Dòng không có scheme được chuyển sang URL với http://. Nếu dùng SOCKS5, hãy đổi scheme trong kết quả.
  • Trong kết quả dạng URL, tên đăng nhập và mật khẩu được percent-encode; trong kết quả host:port:user:pass, chúng giữ nguyên.
  • Ở dòng bốn phần, trường thứ hai được đọc là port. Danh sách theo thứ tự user:pass:host:port cần được sắp lại đúng thứ tự trước.
  • Công cụ không nhận dòng có scheme socks5h:// và tính chúng vào số dòng “bỏ qua”. Bạn có thể chuyển các dòng này với socks5:// rồi đổi lại scheme trong kết quả.

Nếu muốn làm việc này trong script, hãy tính đến khả năng mật khẩu chứa : và chỉ tách dòng tối đa ba lần:

from urllib.parse import quote

def to_url(line: str, scheme: str = "http") -> str:
    host, port, user, password = line.strip().split(":", 3)
    return f"{scheme}://{quote(user, safe='')}:{quote(password, safe='')}@{host}:{port}"

print(to_url("gw.weproxy.com.tr:8989:USER:PASSWORD"))
# http://USER:[email protected]:8989

split(":", 3) chỉ tách ở ba dấu phân tách đầu tiên; các ký tự : trong mật khẩu nằm lại ở phần cuối. Cách này không dùng được với host IPv6, những dòng đó cần xử lý riêng.

Lỗi định dạng proxy và cách khắc phục

Một dòng proxy viết sai hiếm khi báo rõ “lỗi định dạng”. Lỗi thường lộ ra ở một bước khác của kết nối, dưới một tên khác:

Triệu chứngNguyên nhân định dạng có thểCách khắc phục
407 Proxy Authentication RequiredMật khẩu có ký tự chưa mã hóa, thứ tự trường bị lẫnPercent-encode mật khẩu, kiểm tra lại thứ tự
Connection refusedThiếu hoặc sai port, chương trình dùng port mặc địnhGhi port rõ ràng
Kết nối đứt ở request đầu tiênViết socks5:// cho HTTP proxy hoặc http:// cho SOCKS5 proxyĐặt scheme khớp với giao thức của sản phẩm
Lỗi bắt tay SSL/TLSĐịa chỉ proxy viết bằng https://Dùng http://
Vẫn thấy IP thật của bạnProxy chỉ được gán cho request HTTP, hoặc NO_PROXY bao gồm đíchKhai báo proxy cho cả HTTPS
Dòng không nhập đượcCông cụ không nhận thứ tự nàyChuyển dòng sang định dạng công cụ yêu cầu

Để kiểm tra một dòng có đúng hay không mà không phụ thuộc vào code, hãy dán nó vào proxy checker. Một dòng chạy được trong checker nhưng không chạy trong chương trình của bạn cho thấy vấn đề nằm ở định dạng hoặc ở phần cài đặt proxy của chương trình. Bạn có thể xem quốc gia và mạng của IP đầu ra bằng công cụ My IP. Mã trạng thái HTTP đến từ tầng nào và nên thử lại thế nào với lỗi tạm thời được giải thích chi tiết trong hướng dẫn mã lỗi proxy.

Dòng proxy có thông tin đăng nhập cũng là mật khẩu. Đừng để lộ chúng trong ảnh chụp màn hình, yêu cầu hỗ trợ hay repository công khai; trong code, hãy đọc từ biến môi trường và xóa mật khẩu trong URL trước khi chia sẻ log. Dù dùng proxy cho việc gì, điều khoản sử dụng của website đích, file robots.txt, GDPR và quy định bảo vệ dữ liệu cá nhân tại địa phương vẫn áp dụng. Những cách sử dụng được phép với dịch vụ WeProxy được ghi trên trang chính sách sử dụng chấp nhận được. Để so sánh lựa chọn IP xoay và IP tĩnh, bạn có thể xem các trang rotating residential proxy và IPv4 datacenter tĩnh.

Câu hỏi thường gặp

Định dạng ip:port:user:pass nghĩa là gì?

Đây là dạng danh sách viết IP hoặc host, port, tên đăng nhập và mật khẩu của proxy, ngăn cách bằng dấu hai chấm; ví dụ gw.weproxy.com.tr:8989:USER:PASSWORD. Trình duyệt antidetect và các ô nhập hàng loạt nhận trực tiếp dạng này. Code và công cụ dòng lệnh thường cần dạng URL http://USER:PASSWORD@host:port; để chuyển đổi, bạn có thể dùng công cụ chuyển đổi định dạng proxy.

Địa chỉ proxy viết bằng http:// hay https://?

Trong đa số trường hợp, viết bằng http://. Scheme mô tả giao thức của proxy server, không phải của website đích. Khi vào site HTTPS qua HTTP proxy, client gửi CONNECT tới proxy và TLS được thiết lập bên trong tunnel. Scheme https:// nghĩa là client cũng nói chuyện TLS với proxy server; nếu proxy không hỗ trợ, kết nối đứt ở bước bắt tay và bạn nhận lỗi SSL.

socks5 và socks5h khác nhau thế nào?

Cả hai đều kết nối tới cùng một SOCKS5 proxy; khác biệt nằm ở việc phân giải DNS. socks5:// phân giải tên miền đích trên máy của bạn rồi gửi địa chỉ IP cho proxy. socks5h:// chuyển tên miền cho proxy và để proxy phân giải. Cách thứ hai ngăn truy vấn DNS đi ra từ mạng nội bộ và để tên miền được phân giải theo vị trí proxy. cURL và requests trong Python đều nhận cả hai scheme.

Mật khẩu có @ hoặc :, viết vào URL proxy thế nào?

Trong dạng URL, hãy viết các ký tự này bằng percent-encoding: @ thành %40, : thành %3A, / thành %2F, # thành %23. Ví dụ, mật khẩu p@ss:9 trở thành p%40ss%3A9. Trong Python, urllib.parse.quote(mat_khau, safe="") làm việc này thay bạn. Mã hóa chỉ áp dụng bên trong URL; với công cụ có trường mật khẩu riêng và dòng host:port:user:pass, hãy nhập mật khẩu nguyên dạng.

Định dạng proxy sai thì sẽ gặp lỗi gì?

Lỗi định dạng thường hiện ra dưới một tên khác. Ký tự chưa mã hóa trong mật khẩu hoặc thứ tự trường bị lẫn cho ra 407 Proxy Authentication Required. Thiếu port gây Connection refused, sai scheme làm kết nối đứt ở request đầu tiên, còn địa chỉ proxy viết bằng https:// gây lỗi bắt tay SSL. Dán dòng vào proxy checker để biết vấn đề nằm ở định dạng hay ở cài đặt proxy của chương trình.

Bắt Đầu

Kiểm tra thiết lập proxy của bạn ngay hôm nay

Kiểm tra khả năng kết nối bằng các công cụ miễn phí hoặc trao đổi với bộ phận bán hàng để chọn gói phù hợp.