QtNetwork. How to send multiple simultaneous requests via multiple proxy servers?

  • Hello. First of all I want to apologize for my bad English. Okay...
    I have list of accounts in format login:password and list of proxies ip:port. My task is to authorize an account and verify some of its characteristics. It is simple to do if I have one connection.

    By it sounds good if I will be able to send, for example, five requests (POST) from proxies A, B, C, D, E at the same time. Than, if some of them replied I can send request (GET) from the same proxies. If some of them replies I can check content of reply. When all requests replied I select new proxies and repeat the process until all accounts are checked.

    Please, see the pictures below to understand better what I am talking about...

    I am using Qt 5.1 and now I have this...
    (few comments because the function names represent what they are doing)

    @/// Types
    class MyQNetworkAccessManager: public QNetworkAccessManager

    account( {"", ""} ) {}
    std::pair<QString, QString> account; // I need network manager to know what account it is checking

    /// Variables...
    QVector<MyQNetworkAccessManager*> nam;
    QVector<QNetworkProxy> proxies;
    QVector<std::pair<QString, QString>> accounts;
    qint32 threads; //the size of nam is equal to this

    /// slots...
    void authorizationDone(QNetworkReply *reply);
    void openHomepageDone(QNetworkReply *reply);

    /// functions...
    void authorizationRequest(QNetworkAccessManager *manager);
    void openHomepageRequest(QNetworkAccessManager *manager);
    void process(); // main funtion which send initial requests

    // simply casts base object to derived
    MyQNetworkAccessManager* castToDerived(QNetworkAccessManager *base) const;

    /// implementation...

    MyQNetworkAccessManager* castToDerived(QNetworkAccessManager base) const
    return static_cast<MyQNetworkAccessManager

    void process()
    foreach(MyQNetworkAccessManager *ptr, nam) {
    authorizationRequest( ptr );

    void authorizationRequest(QNetworkAccessManager *manager)
    if ( accounts.isEmpty() || proxies.isEmpty() ) {


    // set next proxy
    manager->setProxy( proxies.back() );

    // set next account
    castToDerived(manager)->account = accounts.back();

    // send POST request
    manager->post(postUrl, postData);

    // when reply is finished it means that auth done
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(authorizationDone(QNetworkReply*)));

    void openHomepageRequest(QNetworkAccessManager manager)
    connect(manager, SIGNAL(finished(QNetworkReply
    )), this, SLOT(openHomepageDone(QNetworkReply*)));

    void authorizationDone(QNetworkReply reply)
    disconnect(reply->manager(), SIGNAL(finished(QNetworkReply
    )), this, SLOT(authorizationDone(QNetworkReply*)));

    if ( reply->error() == QNetworkReply::NoError ) {
    } else {


    void openHomepageDone(QNetworkReply reply)
    disconnect(reply->manager(), SIGNAL(finished(QNetworkReply
    )), this, SLOT(openHomepageDone(QNetworkReply*)));

    if (reply->error() == QNetworkReply::NoError) {

    // extract some info from reply

    This code works.
    !!! But I think it is bad idea to use vector of network managers because documentation says that application should have only one manages. One manager is enough.

    How can I rewrite this code or algorithm to become better? What to read or study?

    Thank you.

Log in to reply