【问题标题】:Python: Access ftp like browsers do, with proxyPython:像浏览器一样使用代理访问 ftp
【发布时间】:2014-08-07 12:33:29
【问题描述】:

我想访问一个 ftp 服务器,匿名的,只是为了下载。我的公司有一个代理,并且 ftp 端口(21)被阻止。我无法直接访问 ftp 服务器。

我要做的是编写一些行为与浏览器完全相同的代码。这个想法是,如果我可以用我的浏览器下载文件,那么就有办法用代码来完成。

当我尝试访问公司以外的网站时,我的代码可以正常工作,但仍然无法用于 ftp 服务器。

proxy = urllib2.ProxyHandler({'https': 'proxy.mycompanhy.com:8080',
                              'http': 'proxy.mycompanhy.com:80',
                              'ftp': 'proxy.mycompanhy.com:21' })
auth = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)

urlAddress = 'https://python.org'
# urlAddress = 'ftp://ftp1.cptec.inpe.br'

conn = urllib2.urlopen(urlAddress)
return_str = conn.read()
print return_str    

当我尝试访问 python.org 时,它工作正常。如果我删除 install_opener 部分,它不再工作,证明需要代理。 当我使用 ftp url 时,它会阻塞(如果我选择使用这些参数,则会超时)。

我知道 ftp 和 http 是两个非常不同的协议。 我不明白的是浏览器用来访问这些 ftp 服务器的机制。 我的意思是,我不知道服务器端是否有一个在 http 和 ftp 之间进行接口的层,用于检索 html;或者如果浏览器以其他方式访问 ftp 并构建页面。

ftp 域(或 url)和连接模式也可能存在混淆。在我看来,当 urllib2 读取 ftp://... 时,它会自动使用端口 21。

【问题讨论】:

  • 我想这就是你要找的东西code.activestate.com/recipes/…
  • 我已经尝试过这个 HTTP Tunel,但它对我不起作用。它因“getaddrinfo failed”消息而崩溃,这是我通常在不使用代理时收到的消息。我在 ProxySock 类中添加断点,但代码从未执行过。
  • HTTP Tunel 崩溃,因为它无法解析 ftp 地址:需要有代理,在创建 FTP 连接时没有启动。
  • 希望对我有所帮助:-)

标签: python proxy ftp


【解决方案1】:

我找到了使用 wget 的解决方案。这个包处理代理,但文档非常模糊。您需要使用代理名称设置环境变量。

import wget
import os
import errno

# setup proxy
os.environ["ftp_proxy"] = "proxy.mycompanhy.com"
os.environ["http_proxy"] = "proxy.mycompanhy.com"
os.environ["https_proxy"] = "proxy.mycompanhy.com"

src = "http://domain.gov/data/fileToDownload.txt"
out = "C:\\outFolder\\outFileName.txt" # out is optional

# create output folder if it doesn't exists
outFolder, _ = os.path.split( out )
try:
    os.makedirs(outFolder)
except OSError as exc: # Python >2.5
    if exc.errno == errno.EEXIST and os.path.isdir(outFolder):
        pass
    else: raise

# download
filename = wget.download(src, out)

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 2023-03-10
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多