c++ - 如何在http代理后面使用ftp url下载文件

标签 c++ qt proxy network-programming qt4

我在 http/https 代理后面。所以要使用 QNetworkAccessManager 下载文件,我将代理设置如下:

    if(no_proxy)
    {
        QNetworkProxyFactory::setUseSystemConfiguration (false);
        QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
    }
    else if(system_proxy)
    {
        QNetworkProxyQuery pQuery(QUrl(QLatin1String("http://www.google.com")));
        QList<QNetworkProxy>listOfProxies =QNetworkProxyFactory::systemProxyForQuery(pQuery);
        QNetworkProxy::setApplicationProxy(listOfProxies.first());
    }
    else if(manual_proxy)
    {
        proxy.setHostName(address);
        proxy.setPort(port);
        if(http_proxy)
            proxy.setType(QNetworkProxy::HttpProxy);
        else if(socks_proxy)
            proxy.setType(QNetworkProxy::Socks5Proxy);
        else if(ftp_proxy)
            proxy.setType(QNetworkProxy::FtpCachingProxy);
        QNetworkProxy::setApplicationProxy(proxy);
    }

现在在 http squid 代理服务器后面,此代码在 http url 的情况下工作正常。但是,如果我尝试使用 ftp url 下载文件,则下载失败并显示错误

no suitable proxy found

它似乎没有为 ftp url 使用 http 代理。但是,我们在 firefox 中有这样的选项:

use this proxy server for all protocols

如何在 Qt 中做类似的事情!

更新:

void DownloadThread::startDownload()

{ QString args =downUrl,tempFN;

QUrl url = QUrl::fromEncoded(args.toLocal8Bit());

request.setUrl(url);
request.setRawHeader("User-Agent", userAgent);
request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
reply.setCookieJar(cookieJar);
reply=manager.get(request);
connect(reply, SIGNAL(readyRead()),this,
            SLOT(saveToDisk()));
...

最佳答案

您是否尝试过显式设置 Qftp 代理?

int setProxy ( const QString & host, quint16 port )

这可能会让您更高兴,但是,是的,您必须正常为每个连接设置代理,但是,您尝试使用的代理总是有可能不支持 FTP?如果您向我传递有关代理的更多详细信息以及您的问题所在(例如请求/响应代码)

同样在 squid.conf 中可能需要更改/添加以下内容以防它们不存在

acl SSL_ports port 443 21
acl FTP proto FTP
always_direct allow FTP
http_access allow ftp

另外,值得检查一下防火墙是否允许端口 20、21 和 443(我知道这是一个简单的检查,但我经常发现像这样的东西真的很难找到根本原因)。

您有生成的日志文件的拷贝吗?查看返回的错误代码会很有趣/很有帮助。此外,您是否尝试过手动逐步执行程序以查看运行时变量中包含的内容,这将使您更好地了解正在发生的事情,因为可能一切都很好并且有一种简单的方法变量的内容将在短时间内引导您取得进展(可能并非如此,但通常值得一试)。

关于c++ - 如何在http代理后面使用ftp url下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13358281/

相关文章:

C++ .dll 的 Java 等价物?

c++ - 将 42010958 毫秒转换为小时 :Minutes:Seconds in Qt? 的最干净方法是什么

c++ - 在 QFile::setFileName 上获取段错误

python - 扭曲的反向代理连接

macos - 使用 Charles Proxy 将 https 请求路由到本地 http 服务器

c++ - 将 std::map 数据复制到另一个 map

c++ - 访问类 obj 的私有(private)数据

c++ - 鼠标悬停在 QGraphicsPixmapItem 上后 Qt 显示工具提示

python - 从代理服务器后面使用 ez_setup.py 安装 Python 的 easy_install

c++ - 需要计算特定单词的实例数