【问题标题】:How to download file from a site without requiring any authentication, using QNetworkAccessManager如何使用 QNetworkAccessManager 从站点下载文件而不需要任何身份验证
【发布时间】:2012-09-18 13:34:25
【问题描述】:

如果用户已经登录到站点,如何在不需要任何身份验证的情况下从站点下载文件?我们是否应该传递 cookie。怎么做?我正在使用Firefox浏览器。确切的场景是这样的。 有一个需要身份验证的站点。我希望在用户通过浏览器登录网站后,我希望我的代码应该从 flashgot 插件提供的 cookie 字符串,并使用该 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");

【问题讨论】:

    标签: qt network-programming http-headers httpcookie setcookie


    【解决方案1】:

    我会在 UI 中嵌入一个 QWebView,然后一旦用户通过此浏览器登录,您就可以访问页面配置为发送的 QNetworkAccessManager请求。

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

    这应该正确配置了 cookie jar,您可能还需要设置 HTTP Referrer 标头,以便此类系统能够完全欺骗请求。

    如果这不起作用,请使用Wireshark 比较来自浏览器和您的应用程序的请求,并调整您的程序,直到您的请求匹配为止。

    【讨论】:

    • 我实际上无法嵌入 QWebView。我正在开发一个下载器。 Flashgot 插件提供了与我下载文件的 url 相关的 cookie 信息。如果在 authenticationRequired(QNetworkReply*,QAuthenticator*) 信号发出时我传递了用户名和密码,则下载成功。但它失败了 cookie。我希望授权使用 flashgot 插件传递的 cookie
    • 您是否使用 Wireshark 比较了请求?
    • 实际上我以前从未使用过wireshark。我在大学宿舍的代理服务器后面,总是有大量的数据包被交换。
    • wireshark 可以过滤数据包。隔离你需要的并不难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    相关资源
    最近更新 更多