精英盒子 -> 程序设计 -> 法克啊~~精英出来~~有事~~Qt的 [打印本页]

mason 2012-05-26 15:22

法克啊~~精英出来~~有事~~Qt的

QNetworkCookie这个类怎么获取Cookie,为什么我怎么用都不对?@jybox

whtsky 2012-05-26 15:36
重用networkmanager就可以保存cookies。

内容来自[手机版]

whtsky 2012-05-26 15:49
https://github.com/whtsky/3G-Fetion/blob/master/3gfetion.pyw  这是我用QT的网络库写的...你把代码翻译成c++就可以了

内容来自[手机版]

jybox 2012-05-26 16:07
访问jybox.net并显示得到的cookie:

QNetworkAccessManager *manager;
QNetworkReply *reply;

manager=new QNetworkAccessManager;
QNetworkRequest request;
request.setUrl(QUrl("http://jybox.net/bbs/"));
reply=manager->get(request);

//等待下载完成
QEventLoop waitDownload;
QObject::connect(reply, SIGNAL(finished()), &waitDownload, SLOT(quit()));
waitDownload.exec();

//得到Set-Cookie头的二进制数据
QByteArray byteCookies=reply->rawHeader("Set-Cookie");

//用QNetworkCookie来解析Cookie
QList<QNetworkCookie> cookieList = QNetworkCookie::parseCookies(byteCookies);

//显示所有Cookie:
QListIterator<QNetworkCookie> i(cookieList);
while(i.hasNext())
{
    QNetworkCookie cookie=i.next();
    qDebug()<<"----------------";
    qDebug()<<"Name:"<<cookie.name();
    qDebug()<<"Domain:"<<cookie.domain();
    qDebug()<<"Path:"<<cookie.domain();
    qDebug()<<"Value:"<<cookie.value();
}

jybox 2012-05-26 16:07
运行结果:

----------------
Name: "cf20e_lastvisit"
Domain: ""
Path: ""
Value: "0%091338019659%09%2Fbbs%2Findex.php"
----------------
Name: "cf20e_lastpos"
Domain: ""
Path: ""
Value: "index"
----------------
Name: "cf20e_lastvisit"
Domain: ""
Path: ""
Value: "0%091338019659%09%2Fbbs%2Findex.php"
----------------
Name: "cf20e_oltoken"
Domain: ""
Path: ""
Value: "init"
----------------
Name: "cf20e_online_info"
Domain: ""
Path: ""
Value: "1338019659%095%090"
----------------
Name: "cf20e_ci"
Domain: ""
Path: ""
Value: "index%091338019659%09%09"
----------------
Name: "_ac_app_ua"
Domain: ""
Path: ""
Value: "f19d4818ff5ba0a229"
----------------
Name: "__cfduid"
Domain: ".jybox.net"
Path: ".jybox.net"
Value: "dded889b8ba0eba0206e929a23b7534c01338019659"


mason 2012-05-26 21:25
好吧。

mason 2012-05-26 21:26
对了,怎么读取源文件?就是下载到本地的HTML文件。

jybox 2012-05-26 21:30
我们可以编写一个用来获取页面内容的函数:

QString getHttpContent(QString url)
{
    //获得对应URL的内容为QString
    QNetworkRequest request;
    request.setUrl(QUrl(url));
    reply=manager->get(request);

    QEventLoop waitDownload;
    QObject::connect(reply, SIGNAL(finished()), &waitDownload, SLOT(quit()));
    waitDownload.exec();

    return QString::fromUtf8(reply->readAll());
}

你可以这样用:
ui->textArea->setText(getHttpContent("http://jybox.net"));

效果:




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.036489 second(s),query:5 Gzip enabled