Russian Qt Forum
Сентябрь 25, 2024, 23:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QHttp и несколько SOCKS5 proxy c авторизацией  (Прочитано 6556 раз)
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 проксю из моего списка и так чтобы еще авторизироватся на них?
Записан
Serr500
Гость
« Ответ #1 : Сентябрь 12, 2012, 14:25 »

http://qt-project.org/doc/qt-4.8/qhttp.html#setProxy-2
Записан
catprog
Гость
« Ответ #2 : Сентябрь 12, 2012, 16:31 »

Что Вы этим хотите сказать, читал, но видимо не понял. Раньше я использовал прокси без авторизации, вот такой код работал:
Код:
my_qhttp1->setProxy(this->proxy_host,this->proxy_port);
А вот почему новый вариант корректно как мне надо не работает, не понимаю.
Записан
Serr500
Гость
« Ответ #3 : Сентябрь 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. Может пригодиться.
Записан
fuCtor
Гость
« Ответ #4 : Сентябрь 13, 2012, 07:36 »

В документации написано что QHttp не поддерживает SOCKS5 и нужно использовать QNetworkProxy, но как это делать вместе с QHttp не описано.

Так же в документации написано, что QHttp - deprecated и нужно использовать QNetworkAccessManager, а он уже в свою очередь нормально работает с прокси и всем остальным.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 20.