Ngiêm cấm sử đụng PROXY và VPS vào mục đích trái pháp luật bạn sẽ phải chịu toàn bộ trách nhiệm trước pháp luật khi sử dụng dịch vụ của chúng tôi tks!
aiohttp proxy và httpx: Dùng proxy cho Python bất đồng bộ

aiohttp proxy và httpx: Dùng proxy cho Python bất đồng bộ

Chuyên viên Kỹ thuật ProxyVN 04-19-2026 Đang tính... phút đọc

aiohttp proxy và httpx là hai cách phổ biến để chương trình Python bất đồng bộ gửi hàng trăm yêu cầu song song qua máy chủ trung gian. Nếu thư viện requests phù hợp với script nhỏ, thì aiohttp và httpx là lựa chọn khi cần tốc độ cao. Gợi ý tìm kiếm có các cụm "aiohttp proxyconnector", "proxy auth", "socks5". ProxyVN hướng dẫn cả hai thư viện với mã chạy được.

Tổng quan về aiohttp proxy và httpx

Python bất đồng bộ dùng asyncio để chạy nhiều tác vụ chờ mạng cùng lúc trong một luồng. Theo tài liệu asyncio, vòng lặp sự kiện chuyển qua lại giữa các tác vụ khi một tác vụ đang chờ dữ liệu. Với thu thập dữ liệu, điều này nghĩa là trong lúc chờ một trang tải về, chương trình gửi tiếp hàng chục yêu cầu khác.

Đồng bộ và bất đồng bộ

Đồng bộ và bất đồng bộ

Vì sao cần proxy với Python bất đồng bộ

Tốc độ cao là con dao hai lưỡi. Một IP gửi hàng trăm yêu cầu mỗi giây sẽ bị website chặn nhanh chóng. aiohttp proxy giúp phân tán yêu cầu qua nhiều IP, mỗi IP gửi ít hơn. Kết hợp với giới hạn đồng thời, chương trình vừa nhanh vừa ít bị chặn. Nguyên lý chung có trong bài web scraping proxy là gì.

aiohttp và httpx khác nhau thế nào

Bảng: aiohttp và httpx khác nhau thế nào

Tiêu chí

aiohttp

httpx

Kiểu API

Chỉ bất đồng bộ

Cả đồng bộ và bất đồng bộ

Proxy HTTP

Tham số proxy trên mỗi yêu cầu

Tham số proxy trên client hoặc mounts

SOCKS5

Cần gói aiohttp-socks

Cần cài httpx[socks]

HTTP/2

Không

Có, khi cài httpx[http2]

Giống requests

Ít

Nhiều, dễ chuyển từ requests

Khi nào chọn thư viện nào

Nếu đang dùng requests và muốn chuyển sang bất đồng bộ với ít thay đổi, httpx là lựa chọn tự nhiên. Nếu cần hiệu năng cao, hệ sinh thái lâu năm, aiohttp là lựa chọn phổ biến. Cả hai đều hỗ trợ proxy tốt. Bài cài đặt Python proxy từ thư viện Request hướng dẫn phiên bản đồng bộ.

Cấu hình aiohttp proxy HTTP

aiohttp nhận proxy qua tham số proxy trên từng yêu cầu. Theo tài liệu client nâng cao của aiohttp, aiohttp hỗ trợ proxy HTTP thuần và proxy HTTP có xác thực.

aiohttp với proxy và proxy_auth

aiohttp với proxy và proxy_auth

Mã mẫu cơ bản

import asyncio
import aiohttp
 
PROXY = "http://103.x.x.11:8080"
 
async def main():
    async with aiohttp.ClientSession() as s:
        async with s.get("https://api.ipify.org", proxy=PROXY,
                         timeout=aiohttp.ClientTimeout(total=20)) as r:
            print(r.status, await r.text())
 
asyncio.run(main())

ClientSession nên được tạo một lần và dùng cho nhiều yêu cầu. Tạo session mới cho mỗi yêu cầu làm mất lợi ích giữ kết nối và tốn tài nguyên.

Proxy có xác thực

Có hai cách truyền tài khoản. Cách thứ nhất ghi trong URL proxy. Cách thứ hai dùng proxy_auth với aiohttp.BasicAuth, giúp tránh lỗi khi mật khẩu có ký tự đặc biệt:

import aiohttp
 
auth = aiohttp.BasicAuth("user01", "matkhau01")
 
async def lay_ip(s: aiohttp.ClientSession):
    async with s.get("https://api.ipify.org",
                     proxy="http://103.x.x.11:8080",
                     proxy_auth=auth) as r:
        return await r.text()

Danh sách tham số đầy đủ của phương thức request có trong tài liệu tham chiếu client của aiohttp.

aiohttp đọc proxy từ biến môi trường bằng trust_env

aiohttp không đọc biến môi trường proxy theo mặc định. Đặt trust_env bằng True khi tạo session để aiohttp dùng HTTP_PROXY, HTTPS_PROXY, NO_PROXY:

async with aiohttp.ClientSession(trust_env=True) as s:
    async with s.get("https://api.ipify.org") as r:
        print(await r.text())

Với trust_env, aiohttp còn đọc thông tin xác thực từ tệp netrc nếu có. Cú pháp NO_PROXY có trong bài no_proxy là gì.

Cấu hình aiohttp proxy SOCKS5

aiohttp không hỗ trợ SOCKS sẵn. Gói aiohttp-socks bổ sung ProxyConnector để dùng SOCKS4, SOCKS5 và cả HTTP.

Cài đặt

pip install aiohttp aiohttp-socks

Mã mẫu SOCKS5 với ProxyConnector

import asyncio
import aiohttp
from aiohttp_socks import ProxyConnector
 
async def main():
    conn = ProxyConnector.from_url("socks5://user01:matkhau01@103.x.x.11:1080")
    async with aiohttp.ClientSession(connector=conn) as s:
        async with s.get("https://api.ipify.org") as r:
            print(await r.text())
 
asyncio.run(main())

Khác với tham số proxy, connector gắn với cả session. Mọi yêu cầu qua session này đều đi qua cùng proxy SOCKS5. Muốn nhiều proxy SOCKS5, tạo nhiều session, mỗi session một connector.

Phân giải tên miền phía proxy với aiohttp-socks

Với SOCKS5, nên để proxy phân giải tên miền nhằm tránh rò rỉ truy vấn DNS và để website thấy đúng vị trí. aiohttp-socks có tuỳ chọn rdns cho việc này, anh em kiểm tra tài liệu phiên bản đang dùng. Bài proxy HTTP và SOCKS5 khác nhau thế nào giải thích thêm.

Cấu hình proxy trong httpx

httpx đặt proxy trên client thay vì trên từng yêu cầu. Theo tài liệu proxy của httpx, tham số proxy nhận địa chỉ proxy cho mọi yêu cầu của client, còn mounts cho phép định tuyến theo giao thức hoặc tên miền.

httpx AsyncClient với proxy và mounts

httpx AsyncClient với proxy và mounts

AsyncClient với proxy HTTP

import asyncio
import httpx
 
async def main():
    async with httpx.AsyncClient(proxy="http://user01:matkhau01@103.x.x.11:8080",
                                 timeout=20) as c:
        r = await c.get("https://api.ipify.org")
        print(r.status_code, r.text)
 
asyncio.run(main())

Các phiên bản httpx cũ dùng tham số proxies dạng từ điển. Phiên bản mới dùng proxy và mounts. Nếu mã cũ báo lỗi tham số, kiểm tra phiên bản httpx đang cài. Cách dùng AsyncClient có trong tài liệu async của httpx.

Định tuyến bằng mounts

mounts cho phép mỗi kiểu địa chỉ đi qua một proxy khác, hoặc đi thẳng:

import httpx
 
mounts = {
    "http://": httpx.AsyncHTTPTransport(proxy="http://103.x.x.11:8080"),
    "https://": httpx.AsyncHTTPTransport(proxy="http://103.x.x.12:8080"),
    "all://*.congty.vn": None,
}
client = httpx.AsyncClient(mounts=mounts, timeout=20)

Giá trị None nghĩa là đi thẳng không qua proxy. Đây là cách gọn để tên miền nội bộ không bị đẩy ra proxy.

httpx với SOCKS5

Cài thêm phần hỗ trợ SOCKS rồi dùng scheme socks5:

pip install "httpx[socks]"
client = httpx.AsyncClient(proxy="socks5://user01:matkhau01@103.x.x.11:1080")

Biến môi trường trong httpx

httpx mặc định đọc biến môi trường proxy, tức trust_env bằng True. Đặt trust_env bằng False nếu muốn bỏ qua biến môi trường và chỉ dùng proxy khai báo trong mã.

Giới hạn đồng thời khi dùng aiohttp proxy

Sức mạnh của bất đồng bộ là gửi nhiều yêu cầu cùng lúc. Nhưng không giới hạn, chương trình có thể mở hàng nghìn kết nối, làm proxy quá tải và website chặn.

Semaphore giới hạn đồng thời

Semaphore giới hạn đồng thời

Dùng asyncio.Semaphore

import asyncio
import aiohttp
 
sem = asyncio.Semaphore(10)
 
async def tai(s, url, proxy):
    async with sem:
        async with s.get(url, proxy=proxy, timeout=aiohttp.ClientTimeout(total=20)) as r:
            return url, r.status, await r.text()
 
async def main(urls, proxy):
    async with aiohttp.ClientSession() as s:
        kq = await asyncio.gather(*(tai(s, u, proxy) for u in urls),
                                  return_exceptions=True)
        for item in kq:
            print(item if isinstance(item, Exception) else item[:2])

Tối đa 10 yêu cầu chạy cùng lúc, các yêu cầu còn lại chờ. return_exceptions bằng True giúp một yêu cầu lỗi không làm dừng cả nhóm.

Giới hạn kết nối của connector

aiohttp TCPConnector có tham số limit và limit_per_host giới hạn số kết nối tổng và theo máy chủ. Khi đi qua proxy, máy chủ ở đây là proxy. Đặt giới hạn hợp lý giúp không vượt số kết nối proxy cho phép. httpx có httpx.Limits với max_connections và max_keepalive_connections.

Thêm độ trễ

Ngoài giới hạn đồng thời, thêm độ trễ ngẫu nhiên nhỏ giữa các yêu cầu tới cùng website. Lưu lượng đều đặn ít bị chặn hơn. Bài 1 proxy chạy được bao nhiêu luồng giúp chọn mức đồng thời cho mỗi proxy.

Xoay aiohttp proxy theo yêu cầu

Với aiohttp, xoay proxy rất đơn giản vì proxy là tham số của từng yêu cầu.

Xoay vòng tròn với itertools.cycle

import itertools
 
danh_sach = [
    "http://user01:matkhau01@103.x.x.11:8080",
    "http://user01:matkhau01@103.x.x.12:8080",
    "http://user01:matkhau01@103.x.x.13:8080",
]
vong = itertools.cycle(danh_sach)
 
async def tai_xoay(s, url):
    proxy = next(vong)
    async with sem:
        async with s.get(url, proxy=proxy) as r:
            return proxy, r.status

Vì asyncio chạy trong một luồng, next trên itertools.cycle không gặp vấn đề tranh chấp giữa các tác vụ.

Xoay với httpx

Với httpx, proxy gắn với client. Tạo nhiều AsyncClient, mỗi client một proxy, chọn client theo lượt. Nhớ đóng tất cả client khi kết thúc bằng aclose.

Proxy xoay một cổng

Nếu dùng proxy xoay của nhà cung cấp với một cổng cố định, IP phía sau tự đổi, không cần xoay trong mã. Bài proxy pool là gì bàn cách chia proxy theo công việc.

Xử lý lỗi và thử lại với aiohttp proxy

Các ngoại lệ thường gặp

Bảng: Các ngoại lệ thường gặp

Ngoại lệ hoặc mã

Nguyên nhân khả dĩ

Cách xử lý

ClientProxyConnectionError

Không kết nối được proxy

Kiểm tra địa chỉ, cổng, proxy còn sống

ClientHttpProxyError 407

Sai tài khoản proxy

Dùng proxy_auth với BasicAuth

asyncio.TimeoutError

Proxy hoặc website chậm

Tăng timeout hợp lý, đổi proxy

Mã 429

Gửi quá nhanh

Giảm đồng thời, thêm độ trễ

httpx.ProxyError

Lỗi phía proxy trong httpx

Kiểm tra proxy bằng curl

ImportError socksio

Chưa cài hỗ trợ SOCKS cho httpx

Cài httpx[socks]

Thử lại với độ trễ tăng dần trong asyncio

async def tai_co_thu_lai(s, url, lan=3):
    for i in range(lan):
        proxy = next(vong)
        try:
            async with s.get(url, proxy=proxy,
                             timeout=aiohttp.ClientTimeout(total=20)) as r:
                if r.status == 429 or r.status >= 500:
                    await asyncio.sleep(i + 1)
                    continue
                return await r.text()
        except (aiohttp.ClientError, asyncio.TimeoutError):
            await asyncio.sleep(i + 1)
    return None

Mỗi lần thử dùng proxy khác, nghỉ tăng dần. Mã 429 cần được tôn trọng, xem bài mua proxy bị lỗi 429. Lỗi 407 được giải thích trong bài sửa lỗi 407 proxy authentication required.

Kiểm tra aiohttp proxy hoạt động đúng

Kiểm tra IP chương trình asyncio đang dùng

Gọi api.ipify.org qua proxy, IP trả về phải là IP proxy. Với danh sách xoay, gọi vài lần để thấy IP thay đổi.

So sánh kết quả Python với curl

curl -x http://user01:matkhau01@103.x.x.11:8080 https://api.ipify.org

Curl chạy mà Python lỗi thì vấn đề ở mã. Cả hai lỗi thì vấn đề ở proxy. Bài cURL proxy là gì có cách đọc lỗi.

Đo tốc độ

Ghi thời gian từng yêu cầu theo proxy. Proxy chậm hơn hẳn trung bình nên loại khỏi danh sách. Bài proxy bị chậm liệt kê nguyên nhân và cách tăng tốc bằng Python.

Chọn proxy cho chương trình Python bất đồng bộ

Thu thập dữ liệu công khai khối lượng lớn

Dùng proxy dân cư xoay hoặc danh sách nhiều proxy dân cư tĩnh, kết hợp semaphore và độ trễ. Với website Việt Nam, IP Việt Nam theo nhà mạng cho kết quả gần người dùng thật.

Gọi API tốc độ cao

Dùng proxy datacenter nếu API không chặn IP datacenter. Tốc độ cao, ổn định, chi phí thấp. Anh em có thể mua proxy datacenter hoặc dân cư tại ProxyVN, mỗi IP có cả HTTP và SOCKS5.

Kiểm thử theo khu vực

Dùng proxy theo quốc gia, mỗi khu vực một client. Ghi kết quả kèm khu vực để so sánh.

Kiến trúc hàng đợi khi dùng aiohttp proxy cho dự án lớn

Với vài trăm URL, asyncio.gather cùng semaphore là đủ. Với hàng trăm nghìn URL, nên chuyển sang mô hình hàng đợi gồm nhà sản xuất và nhiều worker. Mô hình này giúp kiểm soát bộ nhớ, dễ thử lại và dễ theo dõi.

Nhà sản xuất và worker

Nhà sản xuất đọc danh sách URL và đưa vào asyncio.Queue. Một số worker cố định lấy URL từ hàng đợi, gửi yêu cầu qua proxy, xử lý kết quả. Số worker chính là mức đồng thời. Khi một URL lỗi, worker đưa lại vào hàng đợi kèm số lần đã thử. Cách này không tạo hàng trăm nghìn tác vụ cùng lúc trong bộ nhớ như gather.

Gắn proxy cho worker

Có hai cách. Mỗi worker giữ một proxy cố định, phù hợp khi cần phiên ổn định với website. Hoặc mỗi yêu cầu lấy proxy kế tiếp, phù hợp khi muốn phân tán đều. Với website liên kết phiên với IP, cách thứ nhất cho dữ liệu nhất quán hơn.

Dừng an toàn

Khi hết URL, nhà sản xuất đưa vào hàng đợi các giá trị đặc biệt báo dừng, mỗi worker nhận một giá trị thì thoát vòng lặp. Đóng session sau khi mọi worker đã dừng. Dừng đột ngột có thể làm mất dữ liệu đang xử lý dở.

Cookie và phiên khi dùng aiohttp proxy

Một số website yêu cầu giữ cookie giữa các yêu cầu, ví dụ chọn khu vực, chấp nhận điều khoản, đăng nhập. Khi xoay proxy, cookie và IP cần được quản lý cùng nhau.

Mỗi session một kho cookie

aiohttp ClientSession có kho cookie riêng. Mọi yêu cầu qua session dùng chung cookie. Nếu xoay proxy trong cùng session, website thấy cùng cookie nhưng IP thay đổi liên tục, có thể nghi ngờ hoặc huỷ phiên. httpx AsyncClient cũng có kho cookie riêng theo client.

Gắn session với proxy

Với website cần phiên, tạo nhiều session, mỗi session gắn một proxy cố định và giữ cookie riêng. Mỗi cặp session và proxy giống như một người dùng riêng. Cách làm này tương tự khái niệm giữ IP theo phiên trong bài sticky session proxy là gì.

Xoá cookie khi đổi proxy

Nếu bắt buộc đổi proxy cho một session, xoá cookie trước để bắt đầu phiên mới sạch. aiohttp cho phép xoá kho cookie của session. Đây là cách tránh tình trạng cookie cũ gắn với IP cũ bị website đánh dấu.

Theo dõi hiệu quả aiohttp proxy theo từng IP

Không phải proxy nào trong danh sách cũng tốt như nhau. Theo dõi số liệu theo từng proxy giúp loại proxy kém sớm và giữ tỉ lệ thành công cao.

Các chỉ số nên ghi

  • Số yêu cầu đã gửi qua mỗi proxy.
  • Tỉ lệ thành công, tính trên mã 2xx.
  • Tỉ lệ bị chặn, gồm 403, 429 và trang CAPTCHA.
  • Thời gian phản hồi trung vị và phân vị 95.
  • Số lỗi kết nối tới proxy.

Loại proxy tự động

Khi tỉ lệ lỗi của một proxy vượt ngưỡng, ví dụ năm lỗi liên tiếp, tạm loại proxy khỏi vòng xoay trong một khoảng thời gian, rồi thử lại. Proxy lỗi kéo dài thì loại hẳn và báo người vận hành. Cơ chế này giống chuyển proxy tự động trong bài proxy failover.

Báo cáo định kỳ

Cuối mỗi lần chạy, in bảng tổng hợp theo proxy. So sánh giữa các lần chạy để thấy proxy nào xuống cấp. Bài proxy success rate có thêm cách đo và cải thiện tỉ lệ thành công.

Chạy aiohttp proxy trên máy chủ và Docker

Chương trình bất đồng bộ thường chạy lâu trên máy chủ. Môi trường máy chủ có vài điểm cần lưu ý khi dùng proxy.

Giới hạn tệp mở của hệ điều hành

Mỗi kết nối là một tệp mở. Chương trình mở hàng nghìn kết nối có thể chạm giới hạn của hệ điều hành và báo lỗi quá nhiều tệp mở. Giới hạn đồng thời trong mã và kiểm tra giới hạn của máy chủ trước khi tăng mức đồng thời.

Biến môi trường trong container

Nếu dùng trust_env, truyền HTTP_PROXY, HTTPS_PROXY, NO_PROXY khi chạy container. Không ghi mật khẩu proxy vào Dockerfile. Dịch vụ nội bộ như cơ sở dữ liệu phải nằm trong NO_PROXY. Cấu hình liên quan có trong bài proxy Docker.

Ghi nhật ký có che mật khẩu

Khi ghi nhật ký proxy đang dùng, chỉ ghi máy chủ và cổng, không ghi tài khoản và mật khẩu. Nhật ký thường được gửi tới hệ thống tập trung, mật khẩu lộ ở đó khó thu hồi.

Kiểm thử mã dùng aiohttp proxy

Dựng máy chủ giả

aiohttp có công cụ kiểm thử với máy chủ chạy cục bộ. Dựng máy chủ trả về nội dung cố định hoặc mã lỗi theo kịch bản. Chương trình gọi máy chủ này thay cho website thật.

Kiểm thử logic thử lại và xoay proxy

Cho máy chủ giả trả 429 vài lần rồi mới trả 200. Kiểm tra mã thử lại đúng số lần, đổi proxy giữa các lần, nghỉ đúng khoảng. Với httpx, có thể dùng MockTransport để giả lập phản hồi mà không cần máy chủ.

Không gọi website thật trong kiểm thử tự động

Kiểm thử tự động chạy thường xuyên, gọi website thật sẽ tạo lưu lượng không cần thiết và làm kết quả phụ thuộc mạng. Chỉ chạy kiểm thử tích hợp với proxy thật trong môi trường thử nghiệm, số lượng ít.

Bảo mật khi dùng aiohttp proxy

Không lưu mật khẩu proxy trong mã Python

Đọc thông tin proxy từ biến môi trường hoặc tệp cấu hình riêng không đưa lên kho mã. Dùng thư viện đọc tệp môi trường khi phát triển cục bộ.

Không đặt ssl=False hay verify=False

Tham số ssl bằng False trong aiohttp hoặc verify bằng False trong httpx tắt kiểm tra chứng chỉ. Chỉ dùng tạm khi gỡ lỗi trong môi trường cô lập. Với proxy công ty can thiệp HTTPS, cung cấp chứng chỉ gốc của công ty cho thư viện.

Chọn proxy rõ nguồn cho chương trình Python

Proxy miễn phí có thể ghi lại nội dung yêu cầu, kể cả token API. Bài free proxy có an toàn không liệt kê năm rủi ro cần biết.

Chuyển từ requests sang aiohttp proxy và httpx

Nhiều dự án bắt đầu bằng requests rồi mới chuyển sang bất đồng bộ khi khối lượng tăng. Chuyển đổi đúng cách giúp giữ nguyên cấu hình proxy và tránh lỗi mới.

Từ requests sang httpx

httpx có API gần giống requests. Tham số proxies dạng từ điển của requests tương ứng với proxy hoặc mounts của httpx. Phần lớn mã gọi get, post, đọc status_code, text giữ nguyên. Thay đổi chính là dùng AsyncClient, thêm await và async with.

Từ requests sang aiohttp

aiohttp khác requests nhiều hơn. Proxy truyền theo từng yêu cầu thay vì từ điển. Nội dung phản hồi đọc bằng await r.text() hoặc await r.json(). Session phải được mở và đóng đúng cách trong ngữ cảnh bất đồng bộ.

Giữ cùng một nguồn cấu hình

Dù dùng thư viện nào, nên đọc proxy từ cùng một nguồn cấu hình như biến môi trường hoặc tệp riêng. Khi đổi nhà cung cấp hay thêm proxy, chỉ cần sửa một chỗ. Mã đồng bộ cũ và mã bất đồng bộ mới có thể chạy song song trong giai đoạn chuyển đổi.

Kiểm tra lại giới hạn tốc độ

Mã đồng bộ tự nhiên chậm vì gửi tuần tự. Khi chuyển sang bất đồng bộ, tốc độ tăng vọt nếu không giới hạn. Đây là lúc nhiều dự án bị website chặn đột ngột. Đặt semaphore và độ trễ ngay từ đầu, rồi tăng dần khi đã theo dõi tỉ lệ lỗi.

Tối ưu băng thông khi dùng aiohttp proxy

Nhiều gói proxy tính phí theo dung lượng. Chương trình bất đồng bộ tải nhanh nên cũng tiêu tốn dung lượng nhanh. Vài cách giúp giảm lưu lượng qua proxy mà không ảnh hưởng dữ liệu cần lấy.

Chỉ tải phần cần thiết

Nếu chỉ cần kiểm tra trang còn tồn tại, dùng yêu cầu HEAD thay vì GET. Nếu chỉ cần phần đầu tài liệu, đọc theo luồng và dừng khi đã đủ dữ liệu. aiohttp cho đọc nội dung theo từng khối qua r.content, httpx có phương thức stream.

Bật nén

Gửi header Accept-Encoding để máy chủ nén phản hồi. Cả aiohttp và httpx đều tự giải nén gzip. Trang HTML nén thường nhỏ hơn nhiều so với bản gốc, giảm đáng kể dung lượng qua proxy.

Tránh tải lại trang không đổi

Lưu ETag hoặc Last-Modified của trang đã tải. Lần sau gửi If-None-Match hoặc If-Modified-Since, máy chủ trả 304 nếu trang không đổi, không gửi lại nội dung. Cách này rất hữu ích với tác vụ theo dõi định kỳ.

Chọn cách tính phí phù hợp

Với tác vụ tải nhiều dữ liệu, gói proxy tính theo IP không giới hạn dung lượng thường rẻ hơn gói tính theo GB. Bài nên mua proxy theo port hay băng thông so sánh hai cách. Bài cách tính chi phí mua proxy hướng dẫn tính chi phí theo mỗi yêu cầu.

Câu hỏi thường gặp về aiohttp proxy

aiohttp có hỗ trợ proxy HTTPS không

Tài liệu aiohttp mô tả hỗ trợ proxy HTTP. Với proxy yêu cầu kết nối TLS tới chính proxy, khả năng hỗ trợ phụ thuộc phiên bản. Phần lớn proxy thương mại dùng HTTP tới proxy rồi dựng đường hầm tới website HTTPS, nên chạy bình thường.

Nên dùng aiohttp hay httpx cho dự án mới

Nếu đội quen requests, chọn httpx để dễ chuyển. Nếu cần hiệu năng cao và đã quen asyncio, aiohttp là lựa chọn mạnh. Cả hai đều cấu hình proxy dễ dàng.

Có dùng chung một proxy cho hàng trăm tác vụ được không

Được về kỹ thuật, nhưng proxy và website đều có giới hạn. Dùng semaphore để giới hạn số tác vụ đồng thời cho mỗi proxy, nếu không sẽ gặp lỗi kết nối và mã 429.

Có cần uvloop để tăng tốc không

uvloop thay vòng lặp sự kiện mặc định bằng bản viết trên libuv, thường nhanh hơn với tác vụ mạng nhiều kết nối. Với chương trình bị giới hạn bởi tốc độ website và proxy, lợi ích có thể không đáng kể. Đo trước rồi mới quyết định.

Proxy 4G có dùng được với aiohttp không

Được. Proxy 4G thường có tốc độ thấp hơn datacenter và giới hạn số kết nối, nên giảm mức đồng thời cho mỗi proxy 4G. Với website chặn IP datacenter mạnh, proxy 4G cho tỉ lệ thành công cao hơn. Bài proxy 4G giải thích cơ chế.

Làm sao biết proxy đang dùng HTTP hay SOCKS5

Nhìn scheme trong địa chỉ proxy: http:// là HTTP, socks5:// là SOCKS5. Với aiohttp, proxy HTTP truyền qua tham số proxy, SOCKS5 qua ProxyConnector. Với httpx, cả hai truyền qua tham số proxy, khác nhau ở scheme.

Có cần đóng session khi dùng xong không

Có. Session không được đóng sẽ để lại kết nối mở và cảnh báo khi chương trình kết thúc. Dùng async with để session tự đóng, hoặc gọi await session.close() với aiohttp, await client.aclose() với httpx.

Có nên dùng chung proxy cho aiohttp và trình duyệt tự động không

Không nên. Trình duyệt tự động tải nhiều tài nguyên và có vân tay khác thư viện HTTP. Dùng chung IP làm website thấy hai kiểu hành vi rất khác từ cùng một nơi. Tách nhóm IP cho từng công cụ giúp dễ theo dõi và giảm rủi ro bị chặn dây chuyền.

Xem thêm:

Tổng kết

aiohttp proxy dùng tham số proxy và proxy_auth trên từng yêu cầu, SOCKS5 qua aiohttp-socks. httpx dùng proxy hoặc mounts trên client, SOCKS5 qua httpx[socks]. Luôn giới hạn đồng thời, đặt timeout và thử lại với proxy khác. Cần proxy ổn định cho Python, liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam để cấu hình aiohttp proxy.

TIN TỨC LIÊN QUAN