Russian Qt Forum

Qt => Работа с сетью => Тема начата: catprog от Сентябрь 12, 2012, 13:53



Название: QHttp и несколько SOCKS5 proxy c авторизацией
Отправлено: catprog от Сентябрь 12, 2012, 13:53
В документации написано что QHttp не поддерживает SOCKS5 и нужно использовать QNetworkProxy, но как это делать вместе с QHttp не описано.

Вот такой кусок кода:
Код:
my_qhttp1 = new QHttp;
//......
QNetworkProxy proxy;
proxy.setType(QNetworkProxy::Socks5Proxy);
proxy.setHostName(this->proxy_host);
proxy.setPort(this->proxy_port);
proxy.setUser(this->proxy_login);
proxy.setPassword(this->proxy_pass);
QNetworkProxy::setApplicationProxy(proxy);
my_qhttp1->setProxy(proxy);
вот такой код вроде бы работает, но если у меня несколько разных проксей, то функция QNetworkProxy::setApplicationProxy(proxy); какбудто применяет конкретную проксю для всех моих QHttp объектов, и весь трафик идет через нее одну.

А как сделать так чтобы можно было использовать на каждом конкретном QHttp конкретную SOCKS5 проксю из моего списка и так чтобы еще авторизироватся на них?


Название: Re: QHttp и несколько SOCKS5 proxy c авторизацией
Отправлено: Serr500 от Сентябрь 12, 2012, 14:25
http://qt-project.org/doc/qt-4.8/qhttp.html#setProxy-2 (http://qt-project.org/doc/qt-4.8/qhttp.html#setProxy-2)


Название: Re: QHttp и несколько SOCKS5 proxy c авторизацией
Отправлено: catprog от Сентябрь 12, 2012, 16:31
http://qt-project.org/doc/qt-4.8/qhttp.html#setProxy-2 (http://qt-project.org/doc/qt-4.8/qhttp.html#setProxy-2)
Что Вы этим хотите сказать, читал, но видимо не понял. Раньше я использовал прокси без авторизации, вот такой код работал:
Код:
my_qhttp1->setProxy(this->proxy_host,this->proxy_port);
А вот почему новый вариант корректно как мне надо не работает, не понимаю.


Название: Re: QHttp и несколько SOCKS5 proxy c авторизацией
Отправлено: Serr500 от Сентябрь 12, 2012, 20:18
Что Вы этим хотите сказать, читал, но видимо не понял.
Там нигде не сказано, что надо выполнять какие-то дополнительные действия для использования прокси. То есть достаточно его создать, указать параметры и передать в QHttp.

Раньше я использовал прокси без авторизации, вот такой код работал:
Код:
my_qhttp1->setProxy(this->proxy_host,this->proxy_port);
А теперь надо так:
Код:
my_qhttp1 = new QHttp;
//......
QNetworkProxy proxy;
proxy.setType(QNetworkProxy::Socks5Proxy);
proxy.setHostName(this->proxy_host);
proxy.setPort(this->proxy_port);
proxy.setUser(this->proxy_login);
proxy.setPassword(this->proxy_pass);
// --->>> QNetworkProxy::setApplicationProxy(proxy); <<<--- // УБРАТЬ!
my_qhttp1->setProxy(proxy);

Вас, видимо, сбил пример в описании класса QNetworkProxy:
Код:
 QNetworkProxy proxy;
 proxy.setType(QNetworkProxy::Socks5Proxy);
 proxy.setHostName("proxy.example.com");
 proxy.setPort(1080);
 proxy.setUser("username");
 proxy.setPassword("password");
 QNetworkProxy::setApplicationProxy(proxy);
Но если перевести одну фразу, всё становится понятно.
Оригинал:
Цитировать
This means that existing network-enabled applications that you have written should automatically support network proxy using the following code.
Перевод:
Цитировать
Это означает, что существующие приложения, работающие с сетью, которые вы написали, должны автоматически поддерживать сетевой прокси, используя следующий код.
То есть имеется в виду, что если ваше приложение не умело работать через прокси, то выполнение перед началом сетевых операций данного кода заставит его этот прокси использовать.

Кстати, посмотрите ещё на этот класс: http://qt-project.org/doc/qt-4.8/qnetworkproxyfactory.html (http://qt-project.org/doc/qt-4.8/qnetworkproxyfactory.html). Может пригодиться.


Название: Re: QHttp и несколько SOCKS5 proxy c авторизацией
Отправлено: fuCtor от Сентябрь 13, 2012, 07:36
В документации написано что QHttp не поддерживает SOCKS5 и нужно использовать QNetworkProxy, но как это делать вместе с QHttp не описано.

Так же в документации написано, что QHttp - deprecated и нужно использовать QNetworkAccessManager, а он уже в свою очередь нормально работает с прокси и всем остальным.