1

我在 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()));
...

}

4

1 回答 1

0

您是否尝试过明确设置 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(我知道这是一个简单的检查,但我经常发现像这样的事情可能是一个真正痛苦的根本原因)。

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

于 2012-12-21T14:34:07.440 回答