Russian Qt Forum

Qt => Работа с сетью => Тема начата: mokynis от Август 20, 2010, 09:02



Название: не могу соединиться через прокси
Отправлено: mokynis от Август 20, 2010, 09:02
пытаюсь написать учебную программу для соединения с интернетом. У нас инет через прокси, который даже не в нашем домене (может из-за этого все проблемы?). Программа выдает "Unknown error". Вот код:
Код:
void myHttp::slotRun()
{
    QString rez="success";
    QFile file("OKATO89.sav");
    QHttp http;

    QNetworkProxy proxy;
    proxy.setType(QNetworkProxy::Socks5Proxy);//HttpProxy);
    proxy.setHostName(QString("90.150.83.ххх"));
    proxy.setPort(8080);
    QNetworkProxy::setApplicationProxy(proxy);
//        http.setProxy("90.150.83.ххх",8080);   //не идет-выдает Unknown error
//        qDebug()<<http.errorString();

    if(file.open(QIODevice::WriteOnly))
    {
        http.setHost("fin.yamalfin.ru");
        http.get("/rbs/update/OKATO89.zip",&file);
        http.close();
        file.close();
    }
    else
    {
        rez="can't open file";
    }
    if(!http.errorString().isEmpty())
    {
        rez="error: "+http.errorString();
    }
    ui->l_rez->setText(rez);
}
Что не так? В инете ничего не нашел, в Assistant'е пример с NetworkProxy только в одном месте увидел и тот ничего мне не дал. Помогите!


Название: Re: не могу соединиться через прокси
Отправлено: BRE от Август 20, 2010, 09:27
Вообще "Unknown error" присваивается переменной errorString сразу при создании объекта QHttp и до твоей проверки ее скорее всего никто не меняет.
Т.е. это не ответ на попытку установить прокси.

А вот загрузка не будет работать потому, что она выполняется асинхронно, метод get только начинает ее, сама же работа будет выполняться после выхода из slotRun().
Ну и соответственно этого не происходит из-за того, что все объекты создаются локально и разрушаются после выхода из слота.


Название: Re: не могу соединиться через прокси
Отправлено: merke от Август 20, 2010, 20:01
BRE, получается вот эти строки кода необходимо перенести в конструктор
   
   
Код:
QHttp http;
    QNetworkProxy proxy;
    proxy.setType(QNetworkProxy::Socks5Proxy);//HttpProxy);
    proxy.setHostName(QString("90.150.83.ххх"));
    proxy.setPort(8080);
    QNetworkProxy::setApplicationProxy(proxy);
    http.setProxy("90.150.83.ххх",8080);


Название: Re: не могу соединиться через прокси
Отправлено: BRE от Август 20, 2010, 20:06
BRE, получается вот эти строки кода необходимо перенести в конструктор
С Qt идут примеры, в папке examples/network/http лежит пример использования класса QHttp.  ;)


Название: Re: не могу соединиться через прокси
Отправлено: mokynis от Август 23, 2010, 06:16
спасибо, все нашел. Теперь разберусь


Название: Re: не могу соединиться через прокси
Отправлено: Sergey B. от Август 23, 2010, 09:10
BRE, получается вот эти строки кода необходимо перенести в конструктор

или в метод main()


Название: Re: не могу соединиться через прокси
Отправлено: mokynis от Август 23, 2010, 14:10
погорячился я, когда пообещал разобраться. Нашел пример HTTP в Assistant, перенес его в Qt Creator, добавил описание прокси в main.cpp, запускаю скачать вот этот файл
Цитировать
http://fin.yamalfin.ru/rbs/update/OKATO89.zip
, после недолгих раздумий мне сообщается, что
Цитировать
Download failed: HTTP request failed
Сейчас-то что ему не нравится? Во вложении сама программа (на всякий случай)

 А если тип прокси выбираю Socks5, то сообщение другое:
Цитировать
Download failed: Connection refused
Хрен редьки не слаще...


Название: Re: не могу соединиться через прокси
Отправлено: BRE от Август 23, 2010, 14:33
Возьми этот пример еще раз, добавь в функцию main() установку proxy. Больше (!) ничего не меняй. НИЧЕГО.  :)
И попробуй.


Название: Re: не могу соединиться через прокси
Отправлено: mokynis от Август 24, 2010, 06:15
Все-таки дело, похоже именно в прокси. Дома (там у меня WiFi) программа с закомментированным прокси (именно та, что во вложении) сработала. На работе все те же сообщения. Что может быть?
Тут такое соображение-админы, командующие прокси, "закрутили гайки" так, что при попытке что-нибудь скачать, выдается
Цитировать
анный веб-узел ( http://somefile ) был блокирован из-за того, что веб-категория "Downloads" недопустима.
Может все дело в этом?


Название: Re: не могу соединиться через прокси
Отправлено: Roman_L от Август 24, 2010, 10:36
Может все дело в этом?

А у Вас на работе доменные имена резолвятся? Может тоже не определяется ip и оттого ошибки?
Соседняя головная боль: http://www.prog.org.ru/topic_14643_0.html


Название: Re: не могу соединиться через прокси
Отправлено: mokynis от Август 24, 2010, 14:29
Цитировать
А у Вас на работе доменные имена резолвятся?
да вроде все работает (кроме как через мою программу :( ). Пробовал ping сделать на тот хост, адрес которого подставляю в urlLineEdit-все определяется и пингуется. Пробовал в программе прописывать хост в виде IP-тот же ответ: "HTTP request failed"

после всяческих ухищрений добился того, что не только сообщается, что "request failed", но и в Application output пишется:
Цитировать
UNEXPECTED RESPONSE: [HTTP/1.1 403 Forbidden

mime-version: 1.0
date: Tue, 31 Aug 2010 17:31:20 YEKST
content-type: text/html
proxy-connection: keep-alive
content-length: 1779

]
UNEXPECTED RESPONSE: [HTTP/137714344.137237856 851968


]
UNEXPECTED RESPONSE: [HTTP/4390991.137035776 3932160
Это что значит (в браузере файл открывается, так что 403 ошибки быть не должно)? Приблизился я к решению или все так же далек от него?