PycURL phơi bày hỗ trợ FTP và SOCKS của libcurl qua một handle truyền duy nhất. Với một lần tải FTP thụ động, ứng dụng có thể để cả kết nối điều khiển lẫn kết nối dữ liệu riêng cho phần hiện thực đó.

import pycurl

transfer = pycurl.Curl()
try:
    transfer.setopt(pycurl.URL, ftp_url)
    transfer.setopt(pycurl.PROXY, "socks5h://proxy.example.net:1080")
    transfer.setopt(pycurl.NOPROXY, "")
    transfer.setopt(pycurl.WRITEDATA, output)
    transfer.setopt(pycurl.CONNECTTIMEOUT, 10)
    transfer.setopt(pycurl.TIMEOUT, 60)
    transfer.perform()
finally:
    transfer.close()

ftp_url là URL tài nguyên FTP của ứng dụng, và output là một luồng xuất nhị phân đã mở. Các thời gian chờ là những giới hạn ví dụ cần chọn theo kích thước tệp và kết nối dự kiến. Với một tài nguyên FTP công cộng nơi các trung gian công cộng được phép, danh sách proxy SOCKS5 cung cấp các ứng viên cho URL proxy; hãy kiểm tra nút đã chọn cho phép cả đích điều khiển lẫn đích dữ liệu thụ động.

socks5h giao việc phân giải tên máy chủ đích cho proxy SOCKS. NOPROXY được để trống có chủ đích để một thiết lập môi trường no_proxy kế thừa không bỏ qua tuyến đường của lần truyền này.

Hãy để FTP chủ động ở trạng thái tắt: nó chờ một kết nối đến từ máy chủ và không khả dụng trong chế độ proxy này. Chính sách ra ngoài của proxy phải cho phép cổng điều khiển FTP và cổng dữ liệu thụ động được chọn cho lần truyền. Vì vậy chỉ đăng nhập thành công không chứng minh rằng có thể tải tệp xuống.

Khi cần xác thực, hãy dùng PROXYUSERNAME và PROXYPASSWORD của PycURL cho trung gian; thông tin đăng nhập máy chủ FTP thuộc về kết nối FTP.

Bài viết liên quan