2014-10-07 37 views
0

如何使用QtWebkit通过两个网络接口发送请求?测试代码似乎使用相同的接口。现在的问题是:同时使用多个网络会话

  1. 是否WebKit的关心QNetworkSession
  2. 如果没有,我怎么能强迫的WebKit使用特定的网络接口?

样品的编号:

// main.cpp 
QList<QNetworkSession*> sessions; 
    QList<QNetworkConfiguration> configs = configManager.allConfigurations(QNetworkConfiguration::Active); 
    foreach (const QNetworkConfiguration& config, configs) { 
     sessions << new QNetworkSession(config); 
     qDebug() << "Preparing network session on " << config.name(); 
    } 
    foreach (QNetworkSession* session, sessions) { 
     QWebPage* page = new QWebPage(); 
     PageViewer* viewer = new PageViewer(0); 
     QObject::connect(page,SIGNAL(loadFinished(bool)),viewer,SLOT(showResults(bool))); 
     viewer->setPage(page); 
     page->setNetworkAccessManager(&accessManager); 
     session->open(); 
     qDebug() << "Internal IP reported by the interface is:\t\t" 
       << session->interface().addressEntries().at(0).ip().toString(); 
     session->waitForOpened(); 
     page->mainFrame()->load(QUrl("http://wtfismyip.com/text")); 
     session->close(); 
    } 

// page-viewer.cpp 

void PageViewer::showResults(bool results) 
{ 
    qDebug() << "External IP reported by `http://wtfismyip.com/text' is:\t" << 
    this->page->mainFrame()->toPlainText().trimmed(); 
} 

回答

1

QNetworkSession定义如果接口是可用的,但它有分组的路由上没有影响。

QtWebKit通过QNetworkAccessManager :: get,并最终通过QTcp/SslSocket传递其所有的网络连接,但我不认为它使用QAbstractSocket :: bind可以用来定义应该使用哪个接口。

很遗憾,我会说这不能通过API来控制,除非您愿意修改QNetworkAccessManager的代码,否则这可能更容易在操作系统路由级别进行调整。