Python ftplib - 通过具有自定义端口的代理连接

Python ftplib - connecting through a proxy with custom port

那么我的问题是,如何修改连接字符串以满足我的防火墙所期望的细节?

这个有点复杂。

  1. 我正在通过企业代理进行连接。我可以使用 Filezilla 成功连接。更多信息如下。
  2. 代理有一个我需要连接的自定义端口:8021

我不是 ftplib 高手,但这是我到目前为止所做的:


    import ftplib
    from dateutil import parser
    
    host_proxy = 'our.proxy.internal'
    host_port = 8021
    
    ftp_user = 'username'
    ftp_pass = 'password'
    ftp_host = 'ftp.thesite.com'
    
    u = "user %s@%s" % (ftp_user, ftp_host)
    p = "pass %s" % (ftp_pass)
    
    print(u)
    print(p)
    
    ftp = ftplib.FTP(host_proxy, host_port, u, p)

此设置失败并出现错误:ConnectionRefusedError No connection could be made because the target machine actively refused it.

这是进步!

Filezilla 自定义 FTP 代理设置如下:


    user %u@%h 
    pass %p

其中:

%u = ftp_user   
%h = ftp_host   
%p = ftp_pass   
Proxy Host = our.proxy.internal

显然,分成两行很重要。

这适用于发布的场景:

import ftplib
from dateutil import parser

#proxy details
host_proxy = 'organisation.silly.proxy'
host_port = 8021

#ftp details
ftp_user = 'ftpusername'
ftp_pass = 'ftppassword'
ftp_host = 'ftp.thesite.com'

ftp_loginstring = ftp_user + "@" + ftp_host 

ftp = FTP()
ftp.set_debuglevel(1)
ftp.connect(host_proxy, host_port)
ftp.login(user=ftp_loginstring, passwd=ftp_pass)


print("Logged in ok")