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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QNetworkAccessManager проблема с редиректом  (Прочитано 2981 раз)
Paramon
Гость
« : Февраль 17, 2015, 13:25 »

Собственно делаю запрос к сайту, он возвращает код 302 и ссылку в location - "/". При попытке пройти по этой "ссылке" QNetworkReply естественно возвращает ошибку что нету такого протокола "" (т.е. пусто).
Есть ли способ обойтись малой кровью, или в таком случае нужно брать последний URL, парсить домен и добавлять к нему location?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Февраль 17, 2015, 13:37 »

или в таком случае нужно брать последний URL, парсить домен и добавлять к нему location?

Да. Location может быть относительным, поэтому полный путь нового URL ты должен составить сам
« Последнее редактирование: Февраль 17, 2015, 13:47 от Alex Custov » Записан
Paramon
Гость
« Ответ #2 : Февраль 17, 2015, 16:27 »

Как-то вот так получилось.  Улыбающийся
Код:
    QVariant iRedirectState=networkReply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    if(iRedirectState==301 || iRedirectState==302)
    {
        QString redirectURL=networkReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toString();
        if(redirectURL.left(4).toLower()!="http")
        {
            redirectURL.insert(0,networkRequest.url().scheme().toLower()+"://"+networkRequest.url().host());
        }
        networkRequest.setUrl(QUrl(redirectURL));
    }

Да, как-то пропустил, что вероятно всё это можно указать в QUrl без преобразований в QString и обратно. На скорую руку.
« Последнее редактирование: Февраль 17, 2015, 16:28 от Paramon » Записан
Paramon
Гость
« Ответ #3 : Февраль 17, 2015, 16:33 »

Так наверное правильнее
Код:
    QVariant iRedirectState=networkReply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    if(iRedirectState==301 || iRedirectState==302)
    {
        QUrl redirectTo = networkReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
        if(redirectTo.scheme().isEmpty())
        {
            redirectTo.setScheme(networkRequest.url().scheme());
            redirectTo.setHost(networkRequest.url().host());
        }
        networkRequest.setUrl(redirectTo);
    }
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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