Pobieranie FTP przez SOCKS z PycURL
Pozwól libcurl obsłużyć połączenie sterujące i pasywne połączenie danych pobierania FTP przez proxy SOCKS5.
PycURL udostępnia obsługę FTP i SOCKS z libcurl przez jeden uchwyt transferu. Przy pasywnym pobieraniu FTP aplikacja może oddać temu mechanizmowi zarówno połączenie sterujące, jak i osobne połączenie danych.
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 to adres URL zasobu FTP aplikacji, a output to już otwarty binarny strumień wyjściowy. Limity czasu to przykładowe wartości do wyboru według oczekiwanego rozmiaru pliku i połączenia. Dla publicznego zasobu FTP, w którym dozwoleni są publiczni pośrednicy, lista proxy SOCKS5 oferuje kandydatów na adres proxy; sprawdź, czy wybrany węzeł zezwala zarówno na cel sterujący, jak i pasywny cel danych.
socks5h zleca rozwiązanie nazwy hosta docelowego proxy SOCKS. NOPROXY jest celowo puste, aby odziedziczone ustawienie środowiska no_proxy nie omijało trasy tego transferu.
Pozostaw aktywny FTP wyłączony: oczekuje on połączenia przychodzącego z serwera i nie jest dostępny w tym trybie proxy. Polityka wychodząca proxy musi zezwalać na port sterujący FTP i port pasywnych danych wybrany dla transferu. Samo udane logowanie nie dowodzi więc, że plik można pobrać.
Gdy potrzebne jest uwierzytelnianie, użyj PROXYUSERNAME i PROXYPASSWORD w PycURL dla pośrednika; dane logowania serwera FTP należą do połączenia FTP.