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

Как да изтеглите файл от сайт, без да изисквате удостоверяване, ако потребителят вече е влязъл в сайта? Трябва ли да предаваме бисквитки. Как да стане това? Използвам браузър firefox. Точният сценарий е такъв. има сайт, който изисква удостоверяване. Искам след като потребителят е влязъл в сайта през браузъра, искам моят код да вземе тази бисквитка от низа на бисквитка, предоставен от flashgot addon, и да изпрати заявка за получаване до портала с тази бисквитка, така че да не се изисква удостоверяване. Опитах това: предавам бисквитки през низ,

  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(); }

Това трябва да има правилно конфигуриран буркан с бисквитки, може да се наложи да зададете и заглавката HTTP Referrer, за да работи този вид система, за да подмени заявката напълно.

Ако това не работи, използвайте Wireshark, за да сравните заявките от браузъра и вашето приложение, и настройте програмата си докато не съвпаднат заявките.

person Silas Parker    schedule 20.09.2012
comment
Всъщност не мога да вградя QWebView. Работя върху програма за изтегляне. Flashgot addon предоставя информация за бисквитките, свързана с URL адреса, от който изтеглям файла. Изтеглянето е успешно, ако подам потребителско име и парола, когато се излъчва сигнал за удостоверяване (QNetworkReply*,QAuthenticator*). Но не успява с бисквитките. Искам да разреша използването на бисквитки, предадени от flashgot addon - 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