【RAD統合環境】 Qt 総合スレ 6 【Win/Mac/Linux】

このエントリーをはてなブックマークに追加
452デフォルトの名無しさん
>>367
QHttp で書いていたのを QNetworkAccessManager で書き直しましたところうまくいきました。ありがとうございました。
#include <QtCore>
#include <QNetworkAccessManager>
#include <QNetworkCookieJar>
#include <QNetworkReply>
#include <iostream>
class QUrl;
class Qt2chwr : public QObject {
Q_OBJECT
public:
Qt2chwr(QObject *parent = 0);
void postmsg(const QUrl &url, const QByteArray &dat);
signals:
void done();
private slots:
void fin(QNetworkReply *reply);
void err(QNetworkReply *reply, const QList<QSslError> &errors) {}
private:
QNetworkAccessManager *nam;
QByteArray data;
};
#include "qt2chwr.h"
int main(int ac, char **av){
QCoreApplication app(ac, av);
Qt2chwr w;
QObject::connect(&w, SIGNAL(done()), &app, SLOT(quit()));
QString dat(QObject::trUtf8("bbs=unix&key=1236650121&FROM=&mail=sage&MESSAGE=さげ&time=1236650121&submit=書き込み&tepo=don"));
QTextCodec *jp = QTextCodec::codecForName("sjis");
w.postmsg(QUrl("http://pc12.2ch.net/test/bbs.cgi"), jp->fromUnicode(dat));
return app.exec();
}
453デフォルトの名無しさん:2010/02/24(水) 03:21:02
Qt2chwr::Qt2chwr(QObject *parent) : QObject(parent){
nam = new QNetworkAccessManager(this);
nam->setCookieJar(new QNetworkCookieJar());
connect(nam, SIGNAL(finished(QNetworkReply *)), this, SLOT(fin(QNetworkReply *)));
connect(nam, SIGNAL(sslErrors(QNetworkReply *, const QList<QSslError> &)), this, SLOT(err(QNetworkReply *, const QList<QSslError> &)));
}
void Qt2chwr::postmsg(const QUrl &url, const QByteArray &dat){
QNetworkRequest request(url);
request.setRawHeader("User-Agent", "Qt4");
request.setRawHeader("Referer", url.toString().toAscii());
nam->post(request, data = dat);
}
void Qt2chwr::fin(QNetworkReply *reply){
if(reply->error() != QNetworkReply::NoError){
std::cerr << "Error: " << qPrintable(reply->errorString()) << std::endl;
}else{
QRegExp re(QString("<!-- 2ch_X:cookie -->"));
if(re.indexIn(reply->readAll()) >= 0){
postmsg(reply->url(), data);
return;
}
}
emit done();
}