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 に答える