Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QNetworkProxy и ISA Server, ISA не авторизует 
:(
    Опции темы
aspirin2003
Дата 19.6.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 18.3.2007
Где: Саратов

Репутация: нет
Всего: нет



Пишу программу, которая должна работать по протоколу http через прокси-сервер (в моем случае - через Microsoft ISA Server).
Для этого юзаю класс QNetworkProxy примерно так:
Код

void MainWindow::downloadLine()
{
    QUrl url("http://www.azbet.com/eventsxml.aspx?AspxAutoDetectCookieSupport=1");
    QFileInfo fileInfo(url.path());
    QString fileName = fileInfo.fileName();
    QDateTime now = QDateTime::currentDateTime();
    fileName = "azbet" + now.toString("yyyyMMddhhmm") + ".xml";

    if (QFile::exists(fileName)) {
        if (QMessageBox::question(this, tr("HTTP"),
                                  tr("There already exists a file called %1 in "
                                     "the current directory. Overwrite?").arg(fileName),
                                  QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Cancel)
            == QMessageBox::Cancel)
            return;
        QFile::remove(fileName);
    }

    file = new QFile(fileName);
    if (!file->open(QIODevice::WriteOnly)) {
        QMessageBox::information(this, tr("HTTP"),
                                 tr("Unable to save the file %1: %2.")
                                 .arg(fileName).arg(file->errorString()));
        delete file;
        file = 0;
        return;
    }

    if (!url.userName().isEmpty())
        http->setUser(url.userName(), url.password());

    httpRequestAborted = false;
    QByteArray path = QUrl::toPercentEncoding(url.path(), "!$&'()*+,;=:@/");
    if (path.isEmpty())
        path = "/";

    QHttpRequestHeader header("GET", url.path());
    header.setValue("Host", url.host());
    header.setValue("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)");
    header.setValue("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    header.setValue("Accept-Language", "en-us,en;q=0.5");
    //header.setValue("Accept-Encoding", "gzip,deflate");
    header.setValue("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
    header.setValue("Keep-Alive", "300");
    header.setValue("Proxy-Connection", "keep-alive");

    //header.setValue("Connection", "keep-alive");
    header.setValue("Cookie", "AspxAutoDetectCookieSupport=1; path=/");
    QHttp::ConnectionMode mode = url.scheme().toLower() == "https" ? QHttp::ConnectionModeHttps : QHttp::ConnectionModeHttp;
    http->setHost(url.host(), mode, url.port() == -1 ? 0 : url.port());
    if (ui->cbProxy->isChecked())
    {
         QNetworkProxy proxy;
        proxy.setType(QNetworkProxy::HttpProxy);
        proxy.setHostName("192.100.201.145");
        proxy.setPort(8080);
        http->setProxy(proxy);
    }
    ui->lineEdit2->setText(header.toString());
    httpGetId = http->request(header, 0, file);

    //httpGetId = http->get(path, file);

    progressDialog->setWindowTitle(tr("HTTP"));
    progressDialog->setLabelText(tr("Downloading %1.").arg(fileName));
    ui->loadLineButton->setEnabled(false);
    ui->statusLabel->setText(path + " " + fileName + " " + url.host());
}

При выполнении этого слота у меня выводится диалоговое окошко proxy dialog с запросом ISA на авторизацию. Ввожу туда данные моей учетной записи, как обычно, но ничего не происходит и вновь приходит запрос на авторизацию.
Включаю сниффер, смотрю:
user posted image
Теперь то же самое, но через браузер:
user posted image
Из сравнения вытекает, что
1. В Qt вместо моего реального домена подставляется имя шлюза.
2. В браузере в поле HostName подставляется имя моей рабочей машины, а в Qt - NULL

Подскажите пожалуйста что делать, а то гугл не помог ничем.
P.S. Пример DemoBrowser из Qt тоже не работает

Это сообщение отредактировал(а) aspirin2003 - 19.6.2009, 14:07
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0397 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.