Как загрузить файл с сайта без аутентификации, используя QNetworkAccessManager

Как загрузить файл с сайта без аутентификации, если пользователь уже авторизовался на сайте? Должны ли мы передавать файлы cookie. Как это сделать? Я использую браузер Firefox. Точный сценарий такой. есть сайт, требующий аутентификации. Я хочу, чтобы после того, как пользователь вошел на сайт через браузер, я хочу, чтобы мой код брал этот файл cookie из строки файла cookie, предоставленной аддоном flashgot, и отправлял запрос на получение на портал с этим файлом cookie, чтобы аутентификация не требуется. Я пробовал это: я передаю файлы cookie через строку,

  cookie=rPopHome=1; FF_JoinPromo=true; __utma=140252452.845088738.1348089486.1348089486.1348089486.1; __utmb=140252452.6.10.1348089486; __utmc=140252452; __utmz=140252452.1348089486.1.1.utmcsr=adf.ly|utmccn=(referral)|utmcmd=referral|utmcct=/7hYuB; ff_membership=SlyL0JODTZMIdfYHy/7imBJHqyHhO9ZHNE4bwnFPzoGYgPVEEneUMsfqaFDsqR+w9EotIx9i7PPL7ZIp1CiUSOtx0Y4mE1GmxayYmnJVD/z5aCTS2qT7fTItiqOprW8rlsEYw2Br7OoETaF3L1RGRQai1zlFQw6QO9qBEPKXC7rOx5LuEEKYlrZFKvuD/m7uDc6SWDJyaW67sRfo/bpb/Q==; ff_referrer_hash=o7e2qf0;

request.setUrl(url);
request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
cookieJar->setCookiesFromUrl(QNetworkCookie::parseCookies(cookie),url.host());
manager.setCookieJar(cookieJar);
reply=manager.get(request);

Но я получаю следующую ошибку, загруженный файл содержит это сообщение:

<h1>HTTP/1.0 401 Unauthorized</h1>
     <p>You have attempted to download via a Premium download link, but we could not verify your Premium account details.</p>
     <p></h1>

Я также изменил пользовательский агент, все равно не удалось:

request.setRawHeader("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1");

person adnan kamili    schedule 18.09.2012    source источник


Ответы (1)


Я бы встроил QWebView в пользовательский интерфейс, а затем как только пользователь войдет в систему через этот браузер, вы сможете получить доступ к QNetworkAccessManager, который страница настроила для отправки запросов.

QNetworkAccessManager* getNetMan(const QWebView* view)
{ return view->page()->networkAccessManager(); }

Это должно иметь правильную настройку файла cookie, вам может потребоваться также установить HTTP-заголовок Referrer, чтобы такая система работала для полной подделки запроса.

Если это не сработает, используйте Wireshark, чтобы сравнить запросы от браузера и вашего приложения и настроить свою программу. пока у вас не будет соответствия запросов.

person Silas Parker    schedule 20.09.2012
comment
На самом деле я не могу встроить QWebView. Я работаю над загрузчиком. Аддон Flashgot предоставляет информацию о файлах cookie, связанную с URL-адресом, с которого я загружаю файл. Загрузка проходит успешно, если я передаю имя пользователя и пароль, когда выдается сигнал authenticationRequired (QNetworkReply*, QAuthenticator*). Но это не работает с файлами cookie. Я хочу разрешить использование файлов cookie, передаваемых надстройкой flashgot - person adnan kamili; 21.09.2012
comment
Вы сравнивали запросы с помощью Wireshark? - person Silas Parker; 21.09.2012
comment
На самом деле я никогда раньше не использовал wireshark. Я нахожусь за прокси-сервером в общежитии колледжа, и всегда происходит обмен пакетами. - person adnan kamili; 21.09.2012
comment
Wireshark может фильтровать пакеты. Нетрудно выделить те, которые вам нужны. - person Jay; 06.08.2013