PycURL로 SOCKS를 통한 FTP 다운로드
libcurl이 SOCKS5 프록시를 통해 FTP 다운로드의 제어 연결과 수동 데이터 연결을 처리하도록 하십시오.
PycURL은 하나의 전송 핸들로 libcurl의 FTP 및 SOCKS 지원을 제공합니다. 수동 FTP 다운로드에서는 애플리케이션이 제어 연결과 별도의 데이터 연결을 모두 해당 구현에 맡길 수 있습니다.
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은 애플리케이션의 FTP 리소스 URL이고, output은 이미 열린 바이너리 출력 스트림입니다. 타임아웃은 예상 파일 크기와 연결에 따라 선택하는 예시 한계입니다. 공개 중개자가 허용되는 공개 FTP 리소스의 경우 SOCKS5 프록시 목록이 프록시 URL 후보를 제공합니다. 선택한 노드가 제어 대상과 수동 데이터 대상 모두를 허용하는지 확인하십시오.
socks5h는 대상 호스트 이름 확인을 SOCKS 프록시에 위임합니다. NOPROXY를 명시적으로 비워 두는 것은 상속된 no_proxy 환경 설정이 이 전송의 경로를 우회하지 않게 하기 위해서입니다.
능동 FTP는 비활성 상태로 두십시오. 서버에서 들어오는 연결을 기대하며 이 프록시 모드에서는 사용할 수 없습니다. 프록시의 아웃바운드 정책은 FTP 제어 포트와 전송에 선택한 수동 데이터 포트를 모두 허용해야 합니다. 따라서 로그인 성공만으로는 파일을 다운로드할 수 있음이 증명되지 않습니다.
인증이 필요하면 중개자에 대해 PycURL의 PROXYUSERNAME과 PROXYPASSWORD를 사용하십시오. FTP 서버 자격 증명은 FTP 연결에 속합니다.