PySocks의 기본값은 ftplib를 다시 연결하지 않습니다
set_default_proxy가 Python의 기본 socket 구현을 바꾼다고 가정하지 말고 ftplib가 실제로 만드는 socket을 추적하세요.
socks.set_default_proxy() 는 앞으로 만들어질 PySocks socksocket 객체에 기본값을 저장합니다. Python의 기본 socket 클래스를 대체하지는 않습니다. 따라서 호출이 FTP 연결 전에 일어났다는 이유만으로 ftplib의 경로를 바꾸지는 않습니다.
프록시 URL을 담은 변수가 아니라 생성자를 추적하세요. ftplib는 제어 연결과 추가 전송 연결을 만듭니다. 수동 FTP에서 로그인 성공은 제어 연결이 동작했다는 것만 증명합니다. 목록 조회나 파일 전송에 쓰는 데이터 socket도 의도한 경로가 필요합니다.
socket.socket 를 대체하거나 모듈을 감싸는 방법은 PySocks 기본값을 설정하는 것과는 다른 동작을 합니다. 그 모듈을 공유하는 다른 라이브러리에 영향을 줄 수 있습니다. 나중에 원래대로 잠시 되돌리는 것으로는 동시 연결이 그 변경에서 분리되지 않습니다.
사용자 정의 ftplib 하위 클래스로 연결 경로를 덮을 수 있지만, 복사한 내부 구현은 가져온 Python 릴리스의 가정을 그대로 지닙니다. 타임아웃 센티널과 프로토콜 처리가 포함됩니다. 표준 라이브러리 업데이트는 그 복사본을 갱신하지 않습니다.
필요한 프록시와 FTP 모드에 맞는 유지 관리되는 클라이언트나 지원되는 통합을 고르세요. PycURL을 사용한 수동 FTP 다운로드 예제는 별도의 클라이언트 경로를 보여 줍니다. 애플리케이션이 소유한 사용자 정의라면 어느 생성자가 각 제어 socket과 데이터 socket을 여는지 확인하고, 그것이 대체하는 상위 동작을 보존하세요. 올바른 프록시 값은 그 생성자들이 실제로 사용할 때만 쓸모가 있습니다.