2013-06-21 71 views
0

我想要得到的http://www.youtube.com/的網頁源代碼,但屏蔽了YouTube在我的國家,所以我決定通過代理服務器來訪問它 - 主機名:127.0.0.1端口:8087如何在QNetworkAccessManager上設置代理?

根據我覺得文檔使用

void QNetworkAccessManager::setProxyFactory (QNetworkProxyFactory * factory) 

對我來說是一個不錯的選擇,但我不知道該怎麼給這個函數與我的代理服務器都聯繫起來,我用Google搜索了很多,但發現很難找到如何例子使用這個功能,任何人都可以告訴我如何在我的需求中使用它?

只顯示我如何使用此功能就足夠了,我知道如何讓網頁源代碼

回答

0

子類QNetworkProxyFactory和覆蓋QNetworkProxyFactory::queryProxy然後。爲本地主機代理返回QNetworkProxy,請求URL指向Youtube,否則返回默認代理。

+0

謝謝,但我不想爲所有請求使用相同的代理值。 setProxyFactory是我的最愛 – iMath

+0

對不起,誤解了這個問題。改變了我的答案。 – peppe

+0

1)QNetworkProxyFactory :: queryProxy在創建新的QnetworkProxyFactory時自動調用,對嗎? 2)我認爲返回一個QNetworkProxy對象就夠了,但QNetworkProxyFactory :: queryProxy返回一個QNetworkProxy列表,返回QNetworkProxy列表的目的是什麼? – iMath

4

您需要創建QNetworkProxyFactory的子類並重新實現queryProxy虛擬方法。

QList<QNetworkProxy> MyNetworkProxyFactory::queryProxy (const QNetworkProxyQuery & query) { 
    QNetworkProxy proxy; 
    if (query.url().host() == "www.youtube.com") { 
    // modify 'proxy' variable according to your proxy 
    } 
    return QList<QNetworkProxy>() << proxy; 
} 
+0

1)QNetworkProxyFactory :: queryProxy會在創建新的QnetworkProxyFactory時自動調用,對嗎? 2)我認爲返回一個QNetworkProxy對象就夠了,但QNetworkProxyFactory :: queryProxy返回一個QNetworkProxy列表,返回QNetworkProxy列表的目的是什麼? – iMath

+0

1)否,每個請求將調用一次'queryProxy'。您需要在使用'QNetworkAccessManager :: setProxyFactory'創建後註冊您的工廠。 2)'QNetworkProxyFactory :: queryProxy'按優先順序返回一個合適的代理服務器列表。如果您想使用單個代理服務器,則需要返回包含一個元素的列表。這是Qt內部使用的虛函數,所以你不能改變它的返回類型。 –

相關問題