Cách sử dụng HTTPX với proxy: Hướng dẫn hoàn chỉnh 2026
Tóm tắt
HTTPX 0.28.1 sử dụng proxy=, không sử dụng tham số proxies= đã bị loại bỏ. Sử dụng mounts= khi các điểm đến HTTP và HTTPS cần các cách truyền khác nhau.
Một Client hoặc AsyncClient lâu dài thường tốt hơn so với các cuộc gọi ở cấp độ cao lặp đi lặp lại. Các Client tái sử dụng kết nối, tập trung hóa thời gian chờ, và có một ranh giới dọn dẹp rõ ràng.
URL proxy đã xác thực phải mã hóa tên người dùng và mật khẩu. Các ký tự được giữ lại như khoảng trắng, @, và : sẽ làm thay đổi cách phân tích URL.
HTTPX đọc HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, và NO_PROXY theo mặc định. Đặt trust_env=False khi cấu hình ứng dụng cần bỏ qua các cài đặt proxy ở mức máy.
Quay vòng proxy cần một bể khách hàng có giới hạn và các kiểm tra chấp nhận. Lựa chọn ngẫu nhiên một mình không phát hiện được một lộ trình chết, một trang lỗi với trạng thái 200, hoặc dữ liệu không mong đợi.
Proxy HTTPX là gì?
Một proxy HTTPX là một trung gian được cấu hình trong client Python HTTPX để các yêu cầu đến một điểm đến thông qua một điểm cuối mạng khác. Tài liệu chính thức về proxy HTTPX hỗ trợ một proxy duy nhất thông qua proxy= và định tuyến nâng cao thông qua một từ điển các cách truyền đã gán.
Trải nghiem Nstproxy - Bat dau dung thu mien phi ngay
HTTPX là một client HTTP Python đa năng với các API đồng bộ và bất đồng bộ. Cấu hình proxy thay đổi con đường mạng; HTTPX vẫn sở hữu việc quản lý kết nối, thời gian chờ, tính năng chuyển hướng, xác thực TLS, phát streaming phản hồi, và xử lý trạng thái. Một lộ trình được quản lý như Nstproxy Residential Prime Proxies do đó có thể được gán thông qua các cài đặt HTTPX tiêu chuẩn mà không làm thay đổi phân tích hoặc logic nghiệp vụ tiêu thụ phản hồi.
Sử dụng một proxy HTTPX cho việc giám sát giá đã được ủy quyền, kiểm tra nội địa hóa, thử nghiệm trang công cộng, kiểm soát luồng ra doanh nghiệp, hoặc cô lập các công việc độc lập. Một proxy không cấp quyền truy cập đến một điểm đến, không sửa chữa một bộ chọn không hợp lệ, hoặc không chứng minh phản hồi chứa nội dung như mong đợi.
Những thay đổi API Proxy HTTPX mà bạn cần biết
HTTPX 0.28 đã loại bỏ tham số proxies= đã không còn sử dụng, vì vậy mã hiện tại phải sử dụng proxy= hoặc mounts=. Lịch sử phát hành chính thức HTTPX xác định 0.28.1 là phiên bản mới nhất tại thời điểm thử nghiệm và ghi nhận việc loại bỏ này trong dòng 0.28.
Sử dụng những ánh xạ này khi cập nhật các ví dụ cũ:
Mẫu cũ
Mẫu HTTPX 0.28.1
Trường hợp sử dụng
httpx.Client(proxies=proxy_url)
httpx.Client(proxy=proxy_url)
Một điểm cuối cho tất cả các yêu cầu
httpx.get(url, proxies=...)
httpx.get(url, proxy=...)
Một yêu cầu riêng biệt
Từ điển Proxy được truyền dưới dạng proxies=
mounts={"http://": HTTPTransport(...), ...}
Định tuyến khác nhau theo sơ đồ đích
Sơ đồ trên một khóa gán mô tả URL đích. Sơ đồ bên trong URL proxy mô tả kết nối đến proxy. Đối với nhiều cổng HTTP, cả hai gán đích http:// và https:// đều sử dụng đúng một điểm cuối http://proxy-host:port vì các mục tiêu HTTPS được kết nối với CONNECT.
Yêu cầu tiên quyết
Các ví dụ được thực hiện với Python 3.12.13 và HTTPX 0.28.1. Cài đặt phiên bản cố định trong môi trường ảo:
python -m pip installhttpx==0.28.1
Chuẩn bị một mục tiêu đã được ủy quyền và giữ bí mật proxy trong một cấu hình runtime được bảo vệ. Các ví dụ sử dụng PROXY_URL, TARGET_URL, PROXY_USERNAME, PROXY_PASSWORD, và PROXY_URLS. Không cam kết một URL chứa thông tin xác thực hoàn chỉnh hoặc đưa nó vào nhật ký ứng dụng.
Mỗi ví dụ đặt một thời gian chờ rõ ràng. HTTPX phân biệt thời gian chờ kết nối, đọc, ghi, và bể; điều chỉnh chúng theo độ trễ đã quan sát được thay vì loại bỏ giới hạn. Giữ xác minh TLS được bật và cài đặt một chứng chỉ CA được phê duyệt khi một proxy kiểm tra hợp pháp yêu cầu điều đó.
Chuyển tiếp yêu cầu HTTPX thông qua Nstproxy
Tạo một điểm cuối đã xác thực, gán nó vào một khách hàng HTTPX, và xác minh tuyến đường đã trả về.
Bạn có thể sử dụng HTTPX với các proxy thông qua năm mô hình hiện tại: một điểm cuối ở cấp độ khách hàng, xác thực mã hóa, một pool khách hàng bất đồng bộ, biến môi trường, hoặc các phương tiện gắn liền. Tất cả các khối mã Python dưới đây đã chạy trên các điểm cuối địa phương được xây dựng với mục đích. Các phản hồi đã trả về các dấu hiệu tuyến đường không bí mật, điều này xác minh rằng giao thông đã vượt qua proxy dự kiến thay vì chỉ xác nhận rằng HTTPX đã trả về phản hồi.
Phương pháp 1: Sử dụng Một Proxy với Khách hàng Đồng bộ
Sử dụng Client đồng bộ khi các yêu cầu tuần tự chia sẻ một điểm cuối. trust_env=False làm cho tuyến đường rõ ràng có thẩm quyền, trong khi bộ quản lý ngữ cảnh đóng các kết nối trong pool sau khi công việc hoàn thành.
import os
import httpx
proxy_url = os.environ["PROXY_URL"]target_url = os.environ["TARGET_URL"]timeout = httpx.Timeout(15.0, connect=5.0)with httpx.Client(proxy=proxy_url, timeout=timeout, trust_env=False)as client: response = client.get(target_url) response.raise_for_status()if response.headers.get("content-type","").split(";",1)[0]!="application/json":raise ValueError("Đã mong đợi một phản hồi JSON") data = response.json()if data.get("route")!="basic-18480":raise ValueError(f"Tuyến đường không mong đợi: {data}")print(data)
Bài kiểm tra in ra tuyến đường: basic-18480 và bảo tồn URL mục tiêu tuyệt đối nhận được bởi proxy. Thay thế giá trị tuyến đường cố định bằng một dấu hiệu mà điểm cuối chẩn đoán của bạn hoặc phiên cung cấp có thể xác minh.
httpx.get(..., proxy=...) ở cấp cao là hợp lệ cho một cuộc gọi một lần, nhưng các cuộc gọi cấp cao lặp lại không thể tái sử dụng một pool khách hàng. Ưu tiên một khách hàng cho các công việc nhiều trang. Hướng dẫn Dự án thu thập thông tin web Python của Nstproxy giải thích cách xác thực phản hồi phù hợp với một pipeline trích xuất lớn hơn.
Phương pháp 2: Cấu hình một Proxy HTTPX Đã Xác Thực
Sử dụng một proxy đã xác thực bằng cách mã hóa từng thành phần thông tin đăng nhập trước khi xây dựng URL. Mã hóa ngăn ngừa các ký tự được giữ lại không bị hiểu nhầm là dấu phân cách.
import os
from urllib.parse import quote
import httpx
username = quote(os.environ["PROXY_USERNAME"], safe="")password = quote(os.environ["PROXY_PASSWORD"], safe="")host = os.environ["PROXY_HOST"]port = os.environ["PROXY_PORT"]proxy_url =f"http://{username}:{password}@{host}:{port}"with httpx.Client(proxy=proxy_url, timeout=10.0, trust_env=False)as client: response = client.get(os.environ["TARGET_URL"]) response.raise_for_status() data = response.json()if data.get("route")!="auth-18481":raise ValueError(f"Tuyến đường không mong đợi: {data}")print({"route": data["route"],"authenticated": data["authenticated"]})
Kiểm tra trực tiếp đã sử dụng một tên người dùng chứa khoảng trắng và một mật khẩu chứa @ và :. Máy chủ proxy đã từ chối thông tin xác thực thiếu với mã 407, sau đó trả về authenticated: True và lộ trình auth-18481 sau khi HTTPX cung cấp các giá trị đã mã hóa.
Không in proxy_url: nó chứa thông tin xác thực có thể phục hồi. Thay vào đó, hãy ghi lại ID lộ trình, trạng thái, độ trễ và loại thất bại. Một mã 407 lặp lại là một lỗi cấu hình, không phải lý do để sử dụng vòng lặp thử lại không giới hạn.
Phương pháp 3: Luân phiên các phiên bản AsyncClient tái sử dụng
Sử dụng một bể AsyncClient có giới hạn khi các yêu cầu độc lập có thể chạy qua nhiều điểm cuối. Một khách hàng cho mỗi điểm cuối bảo tồn việc tái sử dụng kết nối và làm cho mối quan hệ giữa lộ trình và khách hàng trở nên rõ ràng.
import asyncio
import itertools
import os
import httpx
asyncdeffetch(client: httpx.AsyncClient, target_url:str)->dict: response =await client.get(target_url) response.raise_for_status() data = response.json()if"route"notin data:raise ValueError("Phản hồi không chứa dấu hiệu lộ trình")return data
asyncdefmain()->None: proxy_urls =[value.strip()for value in os.environ["PROXY_URLS"].split(",")if value.strip()]iflen(proxy_urls)<2:raise ValueError("PROXY_URLS phải chứa ít nhất hai điểm cuối") clients =[ httpx.AsyncClient(proxy=proxy_url, timeout=10.0, trust_env=False)for proxy_url in proxy_urls
]try: client_cycle = itertools.cycle(clients) tasks =[fetch(next(client_cycle), os.environ["TARGET_URL"])for _ inrange(4)] results =await asyncio.gather(*tasks)print([result["route"]for result in results])finally:await asyncio.gather(*(client.aclose()for client in clients))asyncio.run(main())
Kết quả luân phiên giữa basic-18480, rotate-18482, basic-18480 và rotate-18482. Việc chọn lựa theo vòng tròn có thể quan sát được và tránh lựa chọn lặp lại vô tình, nhưng nó không phải là một chính sách sức khỏe. Thêm giới hạn đồng thời, bộ đếm thất bại, thời gian làm mát và ngân sách thử lại tối đa trước khi sử dụng một bể lớn hơn. Hướng dẫn xoay vòng proxy Python đề cập đến việc lựa chọn điểm cuối ở cấp độ ứng dụng rộng hơn.
Không tự động phát lại một yêu cầu thay đổi trạng thái qua một lộ trình khác trừ khi thao tác là idempotent hoặc mang một khóa idempotency của ứng dụng. Đối với việc duyệt web có trạng thái, giữ cùng một khách hàng, cookie và lộ trình cố định cùng nhau.
Phương pháp 4: Sử dụng Biến Môi Trường Proxy
HTTPX đọc các biến môi trường proxy theo mặc định, điều này hữu ích cho việc định tuyến do nền tảng quản lý. Tài liệu chính thức về biến môi trường HTTPX định nghĩa HTTP_PROXY, HTTPS_PROXY, ALL_PROXY và NO_PROXY.
import os
import httpx
response = httpx.get(os.environ["TARGET_URL"], timeout=10.0)response.raise_for_status()data = response.json()if data.get("route")!="basic-18480":raise ValueError(f"Lộ trình không mong đợi: {data}")print(data["route"])
Chương trình được thực thi trả về basic-18480 mà không cần tham số proxy trong Python. Kiểm tra NO_PROXY khi một điểm đến bất ngờ tiếp cận trực tiếp. Nếu chương trình phải bỏ qua cài đặt máy chủ, hãy xây dựng một khách hàng với trust_env=False; lựa chọn đó cũng bỏ qua các cấu hình khác được lấy từ môi trường như đường dẫn chứng chỉ.
Phương pháp 5: Định tuyến với Các Mounts HTTPTransport
Sử dụng mounts= khi việc định tuyến phụ thuộc vào chế độ đích hoặc một tập con của các URL. Đây là sự thay thế hiện tại cho các từ điển proxy cũ.
import os
import httpx
proxy_url = os.environ["PROXY_URL"]mounts ={"http://": httpx.HTTPTransport(proxy=proxy_url),"https://": httpx.HTTPTransport(proxy=proxy_url),}with httpx.Client(mounts=mounts, timeout=10.0, trust_env=False)as client: response = client.get(os.environ["TARGET_URL"]) response.raise_for_status() data = response.json()if data.get("route")!="basic-18480":raise ValueError(f"Lộ trình không mong đợi: {data}")print(data["route"])
Mount HTTP đã sản xuất basic-18480 trong lần chạy địa phương. Giữ các khóa mount cụ thể và kiểm tra mọi chế độ mà ứng dụng sử dụng. HTTPX cũng cung cấp hỗ trợ SOCKS tùy chọn thông qua phần mở rộng httpx[socks]; cài đặt phần mở rộng đó và sử dụng URL SOCKS được tài liệu chỉ khi điểm cuối thực sự làm việc với SOCKS.
Cách xác minh một proxy HTTPX
Xác minh một proxy HTTPX qua ba lớp: đường dẫn mạng, ngữ nghĩa phản hồi và đầu ra đã rút. Bắt đầu bằng một địa chỉ IP phản ánh được ủy quyền hoặc một điểm cuối chuẩn đoán và xác nhận dấu hiệu thoát hoặc phiên quan sát được. Sau đó yêu cầu một trạng thái, loại nội dung và trường trang có thể nhận diện chấp nhận được. Cuối cùng, xác thực các hồ sơ mà ứng dụng của bạn dự định giữ lại.
raise_for_status() từ chối các phản hồi 4xx và 5xx, nhưng HTTP 200 vẫn có thể chứa trang lỗi proxy, màn hình đồng ý, trang đăng nhập hoặc ngôn ngữ thay thế. Kiểm tra các trường ngữ nghĩa ổn định và từ chối kết quả trống hoặc không hợp lý. hệ thống ngoại lệ chính thức của HTTPX giúp phân tách các thời gian chờ, lỗi vận chuyển, lỗi proxy và lỗi trạng thái cho các quy tắc thử lại có giới hạn.
Các lần thử lại nên nhắm vào các lỗi kết nối tạm thời, thời gian chờ và cổng. Không thử lại 401, 403, 407 hoặc nội dung không hợp lệ vô thời hạn. Hướng dẫn lỗi máy chủ proxy của Nstproxy cung cấp một phân loại thực tế cho việc khắc phục sự cố ở cấp độ đường dẫn.
Chọn một Đường dẫn Nstproxy cho HTTPX
Nstproxy Residential Prime Proxies cung cấp các điểm cuối được xác thực tiêu chuẩn cho các công việc HTTPX cần định tuyến dân cư, vị trí có thể chọn, và các phiên quay vòng hoặc cố định trên bề mặt sản phẩm hiện tại. Sự phù hợp mạnh mẽ nhất khi mã Python của bạn đã xử lý các yêu cầu HTTP và xác thực trong khi đường dẫn mạng phải vẫn có thể cấu hình bên ngoài logic ứng dụng. Các mô hình thanh toán gói và trả theo mức sử dụng cho phép các nhóm chọn một mô hình hoạt động sau khi đo lường lưu lượng truy cập chấp nhận thay vì viết lại tích hợp HTTPX. Sử dụng sản phẩm cho các kiểm tra phân phối hợp pháp, giám sát giá cả, xác minh quảng cáo và quy trình dữ liệu công khai; kiểm tra chính xác mục tiêu và hành vi phiên trước khi tăng khối lượng.
Tích hợp khách hàng tiêu chuẩn: Gắn kết điểm cuối đã tạo thông qua proxy= hoặc HTTPTransport được gắn; không cần SDK Python cụ thể của nhà cung cấp cho định tuyến cơ bản.
Định tuyến nhận thức phiên: Chọn hành vi xoay vòng cho các yêu cầu độc lập hoặc một phiên cố định cho các luồng phụ thuộc cookie.
Định tuyến proxy không thực hiện phân tích cú pháp, xoá trùng hoặc xác thực lược đồ. Giữ các quy tắc chấp nhận đó trong ứng dụng và theo dõi chi phí mỗi bản ghi đã chấp nhận thay vì chỉ đếm số yêu cầu.
Các Lỗi và Cách Khắc Phục Proxy HTTPX Thông Thường
Triệu chứng
Nguyên nhân khả dĩ
Cách khắc phục thực tế
TypeError đề cập đến proxies
Mã nhắm tới một API HTTPX cũ hơn
Thay thế một điểm cuối bằng proxy=; sử dụng mounts= cho định tuyến nâng cao.
407 Proxy Authentication Required
Tài liệu xác thực thiếu hoặc bị sai định dạng
Mã hóa tên người dùng/mật khẩu riêng biệt và xác thực máy chủ và cổng mà không ghi lại URL.
ProxyError hoặc ConnectTimeout
Điểm cuối không thể truy cập hoặc sử dụng giao thức sai
Xác nhận sơ đồ, DNS, cổng, và khả năng tiếp cận mạng; chỉ thử lại các lỗi tạm thời.
IP trực tiếp xuất hiện
NO_PROXY được khớp hoặc phần mềm khách hàng rõ ràng không được sử dụng
Kiểm tra các biến môi trường và đặt trust_env=False khi cấu hình rõ ràng phải thắng.
HTTPS thất bại qua proxy HTTP
Kết nối hoặc CA tin cậy bị cấu hình sai
Xác nhận cổng hỗ trợ tunneling và cài đặt CA được phê duyệt; không tắt kiểm tra TLS.
Sockets bất đồng bộ tích lũy
Các khách hàng được tạo mà không có dọn dẹp
Tái sử dụng khách hàng có giới hạn và luôn gọi aclose() hoặc sử dụng async with.
Trạng thái 200 nhưng dữ liệu sai
Phản hồi là trang thay thế hoặc trang lỗi mềm
Xác thực loại nội dung, một dấu hiệu ổn định và lược đồ trích xuất cuối cùng.
Kết luận
Một thiết lập proxy HTTPX sản xuất sử dụng API hiện đại proxy= hoặc mounts=, thông tin xác thực được bảo vệ, thời gian chờ rõ ràng, khách hàng có thể tái sử dụng, và các bài kiểm tra chấp nhận phản hồi. Sử dụng một khách hàng đồng bộ cho một đường dẫn ổn định, mã hóa các điểm cuối xác thực một cách cẩn thận và xoay vòng một nhóm các phiên bản AsyncClient có giới hạn chỉ khi công việc độc lập yêu cầu nhiều đường dẫn.
Bắt đầu với một mục tiêu được ủy quyền và xác minh đường dẫn cũng như phản hồi ngữ nghĩa của nó. Thêm quay vòng sau khi các lỗi đã được phân loại và dọn dẹp được chứng minh; xem xét Nstproxy Proxy Manager sau nếu sức khỏe điểm cuối, nhóm và quy tắc định tuyến vượt quá lựa chọn cấp độ ứng dụng.
Trải nghiệm Nstproxy — Bắt đầu dùng thử miễn phí hôm nay
Không. HTTPX 0.28 đã loại bỏ proxies=; sử dụng proxy= cho một điểm cuối và mounts= với các giao thông proxy cho định tuyến phức tạp hơn.
Q: HTTPX có thể sử dụng proxy với AsyncClient không?
Có. Truyền proxy= vào httpx.AsyncClient, tái sử dụng khách hàng cho điểm cuối được chỉ định của nó, và đóng nó bằng async with hoặc aclose().
Q: Tại sao URL proxy HTTP vẫn bắt đầu bằng http:// cho một mục tiêu HTTPS?
Mô hình URL proxy mô tả kết nối đến proxy, trong khi đích sử dụng HTTPS thông qua một đường hầm CONNECT. Do đó, một cổng HTTP có thể phục vụ các đích HTTPS mà không cần URL proxy https://.
Q: Làm thế nào để tôi tắt cài đặt proxy môi trường trong HTTPX?
Tạo một Client hoặc AsyncClient với trust_env=False. HTTPX sẽ bỏ qua cấu hình proxy và các cấu hình liên quan được kế thừa từ môi trường quy trình.
Q: Tôi có nên tạo một AsyncClient mới cho mỗi yêu cầu không?
Không. Hãy tái sử dụng một tập hợp giới hạn các client để HTTPX có thể nhóm các kết nối và gán mỗi client với một điểm cuối hoặc chính sách phiên.
Q: HTTPX có thể sử dụng proxy SOCKS5 không?
Có. Cài đặt phụ thuộc tùy chọn chính thức với httpx[socks] và cấu hình một URL SOCKS socks5:// hoặc hỗ trợ cho một điểm cuối thực sự thực hiện giao thức đó.
Marcus Chen
Aug. 20th 2026
110M+ IP that voi ti le truy cap thanh cong 99.9%
Phan hoi trung binh ~0.5s cho tac vu dong thoi cao
Chi tu $0.1/GB
Truy cap ngay cac pool proxy residential, datacenter, IPv6 va ISP cao cap.